这两者的区别是什么:
ResultSet set = EasyMock.createNiceMock(ResultSet.class);
EasyMock.expect(set.getInt("col1")).andReturn(1);
EasyMock.expect(set.wasNull()).andReturn(false);
EasyMock.expect(set.getInt("col2")).andReturn(2);
EasyMock.expect(set.wasNull()).andReturn(false);
EasyMock.replay(set);
assertEquals(1, set.getInt("col1"));
assertEquals(false, set.wasNull());
assertEquals(2, set.getInt("col2"));
assertEquals(false, set.wasNull());还有这个:
ResultSet set = EasyMock.createNiceMock(ResultSet.class);
EasyMock.expect(set.getInt("col1")).andReturn(1);
EasyMock.expect(set.getInt("col2")).andReturn(2);
EasyMock.expect(set.wasNull()).andReturn(false).times(2);
EasyMock.replay(set);
assertEquals(1, set.getInt("col1"));
assertEquals(false, set.wasNull());
assertEquals(2, set.getInt("col2"));
assertEquals(false, set.wasNull());注意:这两组代码都作为jUnit测试成功编译和运行。另外,请注意,这里有意使用“不错的”mock。
发布于 2011-09-21 00:09:11
回答你标题中的问题--没有区别。调用x.expect(y).times(3)与调用
x.expect(y);
x.expect(y);
x.expect(y);(请注意,正如Andy Thomas-Cramer所指出的,您的特定示例并不完全相等,因为调用的顺序不同。)
这看起来可能只是一个方便的问题。然而,除此之外还有一个明显的区别:在times()的情况下,您可以将预期的调用次数作为一个变量传入。因此,您可以通过一些外部文件或甚至简单地通过一个公共常量int使其可配置,您也可以使用该常量来触发测试工具。这比必须显式编译对expect()的正确调用次数要灵活得多(如果您现在需要使用5个workers而不是3个workers进行测试,还可以更新代码)。
发布于 2011-09-21 00:01:49
第二种方法读写起来更简单。但是,如果将mock更改为严格的mock,则验证调用的顺序将会失败。
https://stackoverflow.com/questions/7488067
复制相似问题