junit-mockito-exception

junit-mockito-exception,exception,junit,mockito,Exception,Junit,Mockito,我对JUnit是新手。我必须测试一个方法,其中一个方法调用必须抛出一个异常,然后它进入catch块。我需要使用JUnit测试这个流。当我尝试Mockito.When(method).thenThrow()时,它不会抛出异常,流也不会进入catch块 我要考的班级: public String exceptionMethod() { String return = null; ClassOne one = new ClassOne(); try { //code one

我对JUnit是新手。我必须测试一个方法,其中一个方法调用必须抛出一个异常,然后它进入catch块。我需要使用JUnit测试这个流。当我尝试
Mockito.When(method).thenThrow()
时,它不会抛出异常,流也不会进入catch块

我要考的班级:

public String exceptionMethod() {
  String return = null;
  ClassOne one = new ClassOne();
  try {
    //code
    one.methodname(parameters); // this is a method which has to throw exception
    return = happy path ;
    //code
  }
  catch(Exception e){
    return = exception ;
    //code
  }
}
JUnit类:

@Mock
Classone one = new Classone();

@Test(expected = RuntimeException.class)
public void testExceptionMethod(){
  Mockito.when(one.method).thenThrow(new RuntimeException());
  //code
  String msg = exceptionMethod();
  assertEquals(msg,"exception");
}

你的代码很接近!您需要检查以下几项:

  • 确保在方法之前调用了
    @方法,或者使用了或。这使Mockito有机会初始化
    @Mock
    字段

  • 确保您的类和方法有资格进行模拟:它们都不能是最终的或静态的。你一定要检查一下房间

  • 调用
    newclassone()
    是一个大问题,因为它确定您没有使用在测试中创建的模拟ClassOne。您需要找出一种方法来确保您的模拟安装在您的测试系统中。一些想法:

    • 为测试创建一个方法覆盖,该方法覆盖接受从测试调用的ClassOne
    • 在被测系统上创建一个工厂方法,该方法调用
      newclassone()
      ,但可以在测试中重写以返回模拟
    • 在前面创建ClassOne并将其保存到一个字段中,然后在测试中用mock替换该字段

  • 编辑您的问题并将代码作为代码块发布,适当缩进。此代码混乱不堪,无法编译,首先没有公共关键字。许多其他问题随后出现。