java-模拟多次调用的静态方法
作者:互联网
我有一个静态方法,该方法在多个地方使用,主要是在静态初始化块中使用.它以Class对象为参数,并返回该类的实例.
我只想在将特定的Class对象用作参数时模拟此静态方法.但是,当从其他地方使用不同的Class对象调用该方法时,它将返回null.
如果参数不是模拟参数,我们如何让静态方法执行实际实现?
class ABC{
void someMethod(){
Node impl = ServiceFactory.getImpl(Node.class); //need to mock this call
impl.xyz();
}
}
class SomeOtherClass{
static Line impl = ServiceFactory.getImpl(Line.class); //the mock code below returns null here
}
class TestABC{
@Mocked ServiceFactory fact;
@Test
public void testSomeMethod(){
new NonStrictExpectations(){
ServiceFactory.getImpl(Node.class);
returns(new NodeImpl());
}
}
}
解决方法:
您想要的是一种“部分模拟”形式,特别是JMockit API中的dynamic partial mocking:
@Test
public void testSomeMethod() {
new NonStrictExpectations(ServiceFactory.class) {{
ServiceFactory.getImpl(Node.class); result = new NodeImpl();
}};
// Call tested code...
}
只有与记录的期望匹配的调用才会被模拟.当调用动态模拟的类时,其他人将执行真实的实现.
标签:jmockit,junit4,java 来源: https://codeday.me/bug/20191031/1972081.html