EasyMock - 随机测试失败 - 匹配器预期

时间:2013-02-12 09:13:50

标签: java unit-testing easymock

我对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);

1 个答案:

答案 0 :(得分:0)

发现问题。我们不能使用gt(0)等方法将参数传递给被测试的单元。

在我的错误的另一个测试中使用过:

service.performOperation(1, gt(0l));

服务不是模拟,而是我正在测试的单元。

在检查文档时,我看到gt(0l)返回0,导致此测试通过其他人失败。 (Dunno为什么?)由于测试是随机执行的,随机条件都失败了。

在测试开始时使用reset(mocks..)没有任何帮助。