【问题标题】:EasyMock: supplying arguments you don't know at compile-timeEasyMock:在编译时提供你不知道的参数
【发布时间】:2010-01-27 16:30:28
【问题描述】:

使用最新版本的 EasyMock,我有一个需要存根的方法。该方法接受一个对象参数并返回 void。

我正在测试的方法正在调用存根方法。那里没有惊喜。我的困难是作为参数提供给模拟方法的对象是由我正在测试的方法创建的。

我知道我可以使用 createNiceMock() 来解决这个问题,但是有没有办法明确地取消这个方法?

示例代码:

public interface IMockMe { 
    void doSomething(InnerObj obj);
}

public class TestMe {
    IMockMe mockMe; 

    public void testThisMethod() {
        InnerObj obj = new InnerObj();
        mockMe.doSomething(obj);
    }
}

class Tester {
    @Test
    public void testThatDarnedMethod() {
        IMockMe mocked = EasyMock.create(IMockMe.class);

        mocked.doSomething( /* what goes here? */);
        EasyMock.expectLastCall();

        TestMe testMe = new TestMe(mocked);
        testMe.testThisMethod();

    }
}

【问题讨论】:

    标签: java easymock


    【解决方案1】:

    查看EasyMock documentation 的“使用参数匹配器的灵活期望”部分。文档中的示例:

    String[] documents = new String[] { "Document 1", "Document 2" };
    expect(mock.voteForRemovals(aryEq(documents))).andReturn(42);
    

    aryEq(documents) 是一个调用,它创建一个匹配器,该匹配器将匹配任何具有正确内容的数组,而不是按标识匹配。

    在您的情况下,您可能需要 anyObject() 匹配器。

    【讨论】:

    • 最好添加一个代码示例,而不是引用该站点
    • @JessBowers:从文档中复制了示例并进行了一些解释。
    • 如果你有一个 void 方法,因此没有 expect() 怎么办?
    • @PieterDeBie:你使用expectLastCall 而不是expect
    猜你喜欢
    • 1970-01-01
    • 2014-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    • 2021-11-09
    • 2013-10-08
    • 2021-11-20
    相关资源
    最近更新 更多