我对EasyMock有一个奇怪的问题
这是我正在制作的电话,它会按预期投出IllegalStateException : Matcher expected
expect(this.mock.expectedOperation(gt(0l), MyClass.class)).andReturn(createClassObject());
如果我用
替换上述电话expect(this.mock.expectedOperation(gt(0l), createClass(MyClass.class))).andReturn(createClassObject());
@SuppressWarnings("unchecked")
public static <T> Class<T> createClass(Class<T> clazz)
{
return (Class<T>) EasyMock.anyObject();
}
大部分时间我没有收到错误,但有时候我会这样做。它保持IllegalStateException : Matcher expected ..
有时我会收到IllegalStateException : 2 Matchers expected 1 recorder
错误:
MyClass object = createClassObject();
expect(this.mock.expectedOperation(anyLong(), anyLong()).andReturn(object);
public MyClass createClassObject() {
// Actually sets properties and then returns
return new MyClass();
}
但是当我这样做时它会运行:
expect(this.mock.expectedOperation(anyLong(), anyLong()).andReturn(createClassObject());
在上面的例子中,有时前者运行而后者失败。
有时会失败:
MyClass object = createClassObject();
expect(this.mock.expectedOperation(1, MyClass.class)).andReturn(object);
我有四重检查重置,重播,验证通话。 这些测试有时会运行,有时会失败。
如果我运行我的单元测试,它会在上面列出的一种情况下至少随机失败一次。为什么?我如何让它运行?
编辑:我使用的是EasyMock 3.1版和
MockedClass mock = EasyMock.createMock(MockedClass.class);
答案 0 :(得分:0)
发现问题。我们不能使用gt(0)等方法将参数传递给被测试的单元。
在我的错误的另一个测试中使用过:
service.performOperation(1, gt(0l));
服务不是模拟,而是我正在测试的单元。
在检查文档时,我看到gt(0l)返回0,导致此测试通过其他人失败。 (Dunno为什么?)由于测试是随机执行的,随机条件都失败了。
在测试开始时使用reset(mocks..)
没有任何帮助。