EasyMock部分模拟私有方法

时间:2013-09-30 10:42:02

标签: java junit easymock

我有以下情况:

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类中的私有方法的行为,以便在不使用模拟的情况下抛出异常?

提前致谢。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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..."));