3
我有一个用例,我试图确保在我的类中调用特定方法时引发了抽象异常。使用Mockito是否可以抛出抽象异常?
我使用的Mockito要做到这一点,但已经注意到,是的Mockito根本就没有抛出异常被调用方法时。
类来进行测试:
public void doSomething() throws CustomException {
try {
Collection<T> results = dao.getDatabaseResults();
} catch (ProblemException e) {
throw new CustomException("There was an exception", e);
}
}
问题Exception类:
public abstract class ProblemException extends RuntimeException {
public ProblemException(String message) {
super(message);
}
public ProblemException(String message, Throwable e) {
super(message, e);
}
测试类:
public testDoSomething() throws Exception {
CustomDAO mockDAO = Mockito.mock(CustomDAO.class);
Mockito.when(mockDAO.getDatabaseResults()).thenThrow(new ProblemException);
try {
foo.doSomething();
Assert.fail();
} catch (CustomException e) {
//Some more asserts
}
目前上述测试类不能编译,因为你可以”创建一个抽象类的新实例。
我没有获得改变AbstractException类,我也不能更改由getDatabaseResults在DAO类()方法抛出的异常类型。
你对这个问题的干净的解决方案有什么建议?
有一件事我能想到的是赶上我的doSomething()方法中的一个RuntimeException(如ProblemException扩展此类)。我只是好奇,如果有更好的方法?
感谢
非常好,非常感谢。不敢相信我之前没有想过这样做!我认为我可能会采用第二个建议,以保护自己免受抽象类未来在某个时间添加其他方法的机会。 – JoshDavies 2013-04-27 14:53:40
我的确认为'thenThrow'也接受一个类。所以'Mockito.when(mockDAO.getDatabaseResults())。ThenThrow(ProblemException.class);' – bowmore 2013-04-28 08:31:00