gpt4 book ai didi

java - 模拟多次调用的静态方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:18:22 26 4
gpt4 key购买 nike

我有一个静态方法,它用在多个地方,主要是在静态初始化 block 中。它以一个 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());
}
}
}

最佳答案

你想要的是一种“部分模拟”的形式,特别是 dynamic partial mocking在 JMockit API 中:

@Test
public void testSomeMethod() {
new NonStrictExpectations(ServiceFactory.class) {{
ServiceFactory.getImpl(Node.class); result = new NodeImpl();
}};

// Call tested code...
}

只有符合记录期望的调用才会被模拟。当调用动态模拟类时,其他人将执行真正的实现。

关于java - 模拟多次调用的静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16145359/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com