gpt4 book ai didi

java - 我们可以模拟第三方对象的创建或调用吗?

转载 作者:太空宇宙 更新时间:2023-11-04 13:46:32 24 4
gpt4 key购买 nike

例如,我有以下处理程序:

@Component
public class MyHandler {

@AutoWired
private MyDependency myDependency;

public void someMethod(Object parameter) {
...
ThirdPartyClass thirdPartyObject = new ThirdPartyClass(parameter);
thirdPartyObject.unnecessaryMethod();
...
}
}

为了测试这个,我想写这样的东西:

@RunWith(MockitoJUnitRunner.class}
class MyHandlerTest {

@InjectMocks
MyHandler myHandler;

@Mock
MyDependency myDependency;

@Test
public void testSomeMethod() {
...
myHandler.someMethor(parameter);
...
}
}

我想避免调用unnecessaryMethod()。有什么办法可以做到这一点吗?

如果 unnecessaryMethod() 是静态的,那么我可以使用 PowerMockito 来模拟它,但是 PowerMockito 对我的情况有帮助吗?

最佳答案

我找到了答案:

public class MyHandler {
public void someMethod() {
Utils utils = new Utils(10);
System.out.println("Should be 1 : " + utils.someMethod());
}
}

一些Utils类:

public class Utils {
private int value = 5;
Utils () {
System.out.println("Should be mocked");
}
Utils (int param) {
this.value = param;
System.out.println("Should be mocked");
}
public int someMethod() {
System.out.println("Should be mocked");
return value;
}
}

和测试类:

@RunWith(PowerMockRunner.class)
@PrepareForTest(MyHandler.class)
public class MyHandlerTest {
@InjectMocks
MyHandler myHandler;
@Test
public void testMain() throws Exception {
Utils utils = mock(Utils.class);
when(utils.someMethod()).thenReturn(1);
whenNew(Utils.class).withArguments(anyInt()).thenReturn(utils);
myHandler.someMethod();
}
}

控制台输出将是:应为 1 : 1

Related question

关于java - 我们可以模拟第三方对象的创建或调用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30778574/

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