如何使用easymock在类中模拟静态方法?

Jav*_*cky 29 java tdd static unit-testing easymock

假设我有一个这样的类:

public class StaticDude{
    public static Object getGroove() {
        // ... some complex logic which returns an object
    };
}
Run Code Online (Sandbox Code Playgroud)

如何使用easy mock模拟静态方法调用?StaticDude.getGroove().

我正在使用easy mock 3.0

Ben*_*n J 25

不确定如何使用纯EasyMock,但考虑使用EasyMock 的PowerMock扩展.

它有很多很酷的功能可以满足您的需求 - https://github.com/jayway/powermock/wiki/MockStatic


ste*_*bot 11

Easymock是"for interfaces(以及通过类扩展的对象)"的测试框架,因此您可以在没有接口的情况下模拟类.考虑创建一个带有静态类访问器的接口对象,然后模拟该访问器.

编辑:顺便说一句,我不建议做静态类.如果您正在进行TDD,最好将所有接口都连接起来.


小智 9

以防万一PowerMock因任何原因无法使用:

您可以将静态调用移动到方法,在测试类中测试类的实例化中重写此方法,在测试类中创建本地接口并在覆盖方法中使用其方法:

private interface IMocker 
{
    boolean doSomething();
}

IMocker imocker = EasyMock.createMock(IMocker.class);

...

@Override
void doSomething()
{
     imocker.doSomething();
}

...

EasyMock.expect(imocker.doSomething()).andReturn(true);
Run Code Online (Sandbox Code Playgroud)

  • 通过这种方式,人们必须为了测试而更改生产代码。 (2认同)