我正在使用EasyMock编写测试,并且有一段这样的源代码:
public void doSomething(){
try
{
// Do something
}
catch (RejectedExecutionException ex)
{
// just add some metrics here, no big action
}
}
我正在为抛出RejectedExecutionException的情况编写测试,但最后没有抛出异常,这意味着我无法使用ExpectedException。那么我应该如何使用EasyMock测试此异常一次?
答案 0 :(得分:1)
我认为你没有一个干净的方法来处理任何模型框架。但是我可以建议你以下解决方案。
解决方案1
修改doSomething()
的代码,如下所示:
public void doSomething(){
try
{
doSomethingImpl(); // throws RejectedExecutionException
}
catch (RejectedExecutionException ex)
{
// just add some metrics here, no big action
}
}.
现在对应该抛出异常的doSomethingImpl()
和不应该使用相同输入数据和状态的doSomething()
执行测试。
解决方案2
你抓住代码做某事,不是吗?例如,调用log.error()
。您可以验证特定呼叫确实发生并且仅发生一次。我不记得使用EasyMock执行此操作的具体语法,但使用Mockito非常简单:使用Mockito.verify()
。
解决方案3 您可以使用PowerMock检查是否调用了异常的构造函数。它不是很干净,因为理论上你可以创建异常实例但不抛出它,但它总比没有好。
您甚至可以将这些解决方案结合起来。但我相信第一个是最好的。
答案 1 :(得分:0)
Do something
部分调用模拟抛出异常?
如果是,请执行expect(mock.methodCalled()).andThrow(new RejectedExecutionException());
然后在测试结束时EasyMock.verify(mock)
。这将确保methodCalled
被调用一次且仅一次。