gpt4 book ai didi

java - 如何使用 PowerMock 模拟嵌套方法

转载 作者:行者123 更新时间:2023-12-02 02:25:40 24 4
gpt4 key购买 nike

假设我有两个类 A 和 B。

Class A{
public String methodA(String name) {
B b = new B();
b.methodB(name);
}
}

Class B{
public String methodB(String name) {
return name+name;
}
}

现在我想模拟 methodA,它有一个对 B 类的嵌套方法调用。我尝试编写下面的 TestCase,但得到 methodNotImplementedException

@Test  
public void testCase() {
A a = new A();
B b = PowerMock.createPartialMock(B.class, "methodB");
EasyMock.expect(b.methodB(anyString())).andReturn("HELLO PTR");
PowerMock.replayAll();
String result = a.methodA("hello ptr");
assertEquals(result, "HELLO PTRHELLO PTR");
PowerMock.verifyAll();
}

谁能告诉我如何使用 PowerMock 解决嵌套方法调用..? 提前致谢

最佳答案

这里有几个问题。

首先,不要同时使用两个模拟框架。在一个框架中创建期望时,没有理由期望另一个框架会知道它。

其次,如果如上所述,您想要模拟 methodA,据说作为使用 A 的测试的一部分,那么就没有理由模拟任何东西来自 B,因为 methodA 的结果是模拟的,并且不会调用 B

第三,mock roles, not objects 。意思是,如果对象C接受A,它不应该获得具体的实现,而是应该获得它使用的接口(interface)。然后在测试中,您模拟该接口(interface),而不是类。

考虑到这些,如果您为 A 创建一个接口(interface),并 stub 该接口(interface)的响应,您的测试将变得更加简单,并且您不必求助于这些类型的工具。

关于java - 如何使用 PowerMock 模拟嵌套方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47815232/

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