我的代码:
public String getTemplate(TestType fileType) {
Util util = new Util();
try {
return util.addPrefix(util.getTemplate(fileType));
} catch (IOException e) {
logger.warn(e.getMessage());
throw new MyException(...);
} catch (SyntaxException e) {
logger.warn(e.getMessage());
throw new MyException(...);
}
}
测试类别:
TestType testType = TestType.main;
Util util = spy(new Util()); //or Util util = mock(Util.class);
when(util.getTemplate(testType)).thenThrow(new SyntaxException(...)); //or IOException
String out = runService.getTemplate(testType);
但是它不起作用。因为这个方法创建了一个新的类。有没有可能在不使用PowerMock的情况下模拟创建一个新的内部类呢?
2条答案
按热度按时间cld4siwp1#
也许可以尝试使用junit和
assertThrows
函数。您可以找到更多信息here前段时间我写了这个测试。
您可以尝试将
fail(e)
更改为assertEquals
或smth else,这将验证您的异常。如果你会问我哪种方法更好,我会说第一种方法更容易理解和阅读。
9w11ddsr2#
您没有检查测试代码中的任何抛出。您的测试类只通过调用.thenThrow来模拟“getTemplate()”的行为:
如果你想检查是否抛出了异常,你可以使用许多Assert库。例如,使用junit.jupiter,你可以通过调用:
您还可以(如果需要)检查该异常是否具有特定消息,例如: