0

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

リセット、リプレイ、検証の呼び出しを 4 回チェックしました。これらのテストは実行されることもあれば、失敗することもあります。

単体テストを実行すると、上記の状況のいずれかで少なくとも 1 回ランダムに失敗します。なんで?どうすれば実行できますか?

編集:EasyMockバージョン3.1を使用しています

MockedClass mock = EasyMock.createMock(MockedClass.class);
4

1 に答える 1

0

問題が見つかりました。gt(0) などのメソッドを使用して、テスト対象のユニットにパラメーターを渡すことはできません。

私の間違いによる別のテストでは、次を使用していました:

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

サービスはモックではありませんでしたが、テストしていたユニットです。

ドキュメントを確認したところ、gt(0l) が 0 を返すことがわかりました。これにより、このテストが他のテストに合格し、失敗しました。(理由がわからない?) テストはランダムに実行されるため、ランダム条件は失敗していました。

テストの開始時にを使用してreset(mocks..)も、何の役にも立ちませんでした。

于 2013-02-12T10:06:23.940 に答える