首页 文章

junit - mockito - 例外

提问于
浏览
-2

我是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");
}

1 回答

  • 0

    你的代码很接近!你需要检查一些事情:

    • 确保您在 @Before 方法中调用MockitoAnnotations.initMocks(this);,或者您正在使用MockitoJUnitRunnerMockitoRule . 这为Mockito提供了初始化 @Mock 字段的机会 .

    • 确保您的类和方法符合模拟条件:既不是最终的也不是静态的 . 请务必查看Mockito limitations FAQ entry .

    • 调用 new ClassOne() 是一个大问题,因为它确定你需要找到一种方法来确保你的模拟安装在被测系统中 . 一些想法:

    • 为测试中创建一个方法覆盖,该方法覆盖从您的测试中调用的ClassOne .

    • 在被测系统上创建一个调用 new ClassOne() 的工厂方法,但可以在测试中重写以返回模拟 .

    • 预先创建ClassOne并将其保存到字段中,然后在测试中用模拟替换该字段 .

相关问题