2

我有以下情况:

public class ClassA {

    public void methodA(){
        try {
            int result=methodB();
        } catch (IOException e) {
           //Some code here
        }
    }

    private int methodB() throws IOException{
        //Some code here
        return 1;
    }
}

我想在我的测试中覆盖公共方法 methodA() 的 catch 块。我不想更改私有方法的可见性。有没有办法使用 EasyMock 实现私有方法的部分模拟?或者有什么方法可以改变我的 Junit 类中私有方法的行为以在不使用模拟的情况下抛出异常?

提前致谢。

4

2 回答 2

3

你不能单独使用 Easymock 来做到这一点,你可以结合使用 EasyMock 和 Powermock 来做到这一点。然后你模拟私有方法的返回值。

于 2013-09-30T10:52:13.447 回答
0

要测试 catch 块,您必须告诉 EasyMock 在调用 methodB 时抛出异常。

从文档:

For specifying exceptions (more exactly: Throwables) to be thrown, the object returned 
by expectLastCall() and expect(T value) provides the method andThrow(Throwable throwable).
The method has to be called in record state after the call to the Mock Object for which 
it specifies the Throwable to be thrown.

例子:

expectLastCall().andThrow(new IOException("Now to test catch block..."));
于 2013-09-30T10:51:43.487 回答