Java 模拟多次调用的静态方法
我有一个静态方法,可以在多个地方使用,主要是在静态初始化块中。它接受一个类对象作为参数,并返回该类的实例。 我只想在使用特定的类对象作为参数时模拟这个静态方法。但是,当使用不同的类对象从其他地方调用该方法时,它将返回nullJava 模拟多次调用的静态方法,java,junit4,jmockit,Java,Junit4,Jmockit,我有一个静态方法,可以在多个地方使用,主要是在静态初始化块中。它接受一个类对象作为参数,并返回该类的实例。 我只想在使用特定的类对象作为参数时模拟这个静态方法。但是,当使用不同的类对象从其他地方调用该方法时,它将返回null 在参数不是模拟参数的情况下,如何让静态方法执行实际实现 class ABC{ void someMethod(){ Node impl = ServiceFactory.getImpl(Node.class); //need to mock this
在参数不是模拟参数的情况下,如何让静态方法执行实际实现
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中:
@Test
public void testSomeMethod() {
new NonStrictExpectations(ServiceFactory.class) {{
ServiceFactory.getImpl(Node.class); result = new NodeImpl();
}};
// Call tested code...
}
只有符合记录的期望的调用才会被模拟。其他人将在调用动态模拟类时执行真正的实现