easymock测试在代码中间抛出异常

hkmswyz6  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(467)

我正在使用easymock编写测试,有一段源代码如下:

public void doSomething(){
    try
    {
        // Do something
    }
    catch (RejectedExecutionException ex)
    {
        // just add some metrics here, no big action
    }
}

我正在为抛出rejectedexecutionexception的案例编写测试,但最终没有抛出异常,这意味着我不能使用expectedexception。那么我应该如何测试这个异常是否在easymock中抛出一次呢?

hpcdzsge

hpcdzsge1#

我不认为你有一个干净的方法来做任何模型框架这一点。不过,我可以向您建议以下解决方案。
解决方案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非常简单:use Mockito.verify() .
解决方案3您可以使用powermock检查是否调用了异常的构造函数。它不是很干净,因为从理论上讲,您可以创建异常示例,但不抛出它,但它总比什么都没有好。
也许你甚至可以结合这些解决方案。但是我相信第一个是最好的。

ukdjmx9f

ukdjmx9f2#

这个 Do something part调用一个mock抛出异常?
如果是,就这么做 expect(mock.methodCalled()).andThrow(new RejectedExecutionException()); 然后 EasyMock.verify(mock) 考试结束时。这将确保 methodCalled 只打过一次电话。

相关问题