Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java EasyMock:将中间任意时间与严格模拟相结合_Java_Unit Testing_Easymock - Fatal编程技术网

Java EasyMock:将中间任意时间与严格模拟相结合

Java EasyMock:将中间任意时间与严格模拟相结合,java,unit-testing,easymock,Java,Unit Testing,Easymock,我想知道是否有可能在easyMock中定义允许“中间”方法调用的行为 假设我想验证此类中doSomething方法的行为: class MyObject { MyOtherObject inner; // init as constructor param... void doSomething() { inner.call1(); inner.call2(); } public String toString() {

我想知道是否有可能在easyMock中定义允许“中间”方法调用的行为

假设我想验证此类中
doSomething
方法的行为:

class MyObject {
    MyOtherObject inner; // init as constructor param...

    void doSomething() {
        inner.call1();
        inner.call2();
    }

    public String toString() {
        return "MyObject{" + inner.getName() + "}";
    }
}
我有一个测试代码:

MyOtherObject mocked = EasyMock.createStrictMock(MyOtherObject.class);
MyObject obj = new MyObject(myOtherObject);

// methods need to be called in this order
EasyMock.expect(mocked.call1()).once();
EasyMock.expect(mocked.call2()).once();

obj.doSomething();
当我使用
toString()
方法将
MyObject.doSomething()
的实现更改为添加日志记录时,我的测试失败,因为我没有添加对
MyOtherObject.getName()
的期望

因为我需要一个严格的mock(带有方法顺序检查),所以简单地添加它是行不通的:
EasyMock.expect(mock.getName()).andReturn(“blahblah”).anyTimes()

有没有一个优雅的方法来解决这个问题?现在,我已经在每个“真实”的期望之前添加了这个“anyTimes()”语句,但是它使我的测试不可读并且难以维护


或者我应该切换到另一个测试框架吗?

如果您不关心方法调用,例如日志记录,您可以使用存根将其从任何验证中排除。因此:

EasyMock.expect(mocked.getName()).andStubReturn("blah");

这将通过返回值防止测试中断,但不会考虑任何类型的模拟验证,包括严格的模拟顺序。

也许您的示例太简单,无法理解此处的实际问题,但为什么您没有
getName
方法的句柄?你真的不知道在这个上下文中它可以被调用多少次吗?它真的会不止一次吗?我的例子确实简化了,当然我可以计算该方法被调用的次数。要点是:我不希望单元测试依赖于添加/更改甚至启用/禁用日志输出。更一般:我想从“严格”顺序中排除一些方法。谢谢,我不知道
和stubreturn
方法,这正是我需要的!我还发现这篇文章解释了该方法与andReturn的区别: