gpt4 book ai didi

java - EasyMock - 模拟从接口(interface)继承的抽象方法

转载 作者:行者123 更新时间:2023-11-29 08:01:26 25 4
gpt4 key购买 nike

我在使用 EasyMock (3.1) 类模拟时遇到了一些困难。这应该适合模拟部分类实现,我认为这应该是单元测试抽象基类同时模拟缺失方法的理想选择。这是模式 - 一个立即可识别的经典...

public interface Interface {
public void intfMethod();
}

public abstract class AbstractBase implements Interface {
public void otherMethod() {
// do some stuff we need to test...
intfMethod();
}
}

现在测试:

public class TestAbstractBase {
AbstractBase testInstance;

@Before
public void setUp() {
testInstance =
createMockBuilder(AbstractBase.class).addMockedMethod("intfMethod").createMock();
}
@Test
public void testOtherMethod() {
testInstance.intfMethod(); // expect this to be invoked on the mock...
replay(testInstance);
testInstance.otherMethod();
verify(testInstance);
}
}

EasyMock 似乎不喜欢这样。它抛出:

java.lang.IllegalArgumentException: Method not found (or private): intfMethod
at org.easymock.internal.MockBuilder.addMockedMethod(MockBuilder.java:78)
at TestAbstractBase.setUp(TestAbstractBase.java:19)

有什么想法吗?我找到了一个 related question但它并没有真正名副其实......

最佳答案

非常感谢@nhaldimann;我忽略了这个 innocuous statement in the doc ,即“默认情况下可以方便地模拟抽象方法”。因此,以上所有需求都是删除显式模拟接口(interface)方法的尝试,如:

testInstance = createMockBuilder(AbstractBase.class).createMock();

在研究这个问题时,我遇到了另外两个解决方法 - 尽管上面的方法显然更可取:

  1. 使用更强大的 addMockedMethod(Method) API,如:

    public void setUp() throws Exception {
    Method m = AbstractBase.class.getMethod("intfMethod");
    testInstance = createMockBuilder(AbstractBase.class).addMockedMethod(m).createMock();
    }
  2. AbstractBase

    中显式公开intfMethod方法

这两个解决方法表明我最初的问题是 EasyMock 方面的一个错误。但由于在第一个实例中不需要模拟该方法,我们会说这是“用户(我的)错误”。

关于java - EasyMock - 模拟从接口(interface)继承的抽象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14199804/

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