0

たぶんこれは逆効果かもしれませんが、私にはわかりませんが、現在、EasyMock モック、特にモックメソッドが実際に返すものを認識している IntelliJ のデバッガーが必要です。

たとえば、ITransportモックする必要のあるいくつかのメソッドがあり、何かを返すいくつかのメソッドのみが必要なトランスポート インターフェイスがあります。例えば

ITransport myTransport = createMock(ITransport.class);

myTransport.getID() がモック ID 10 を返すようにします。

expect(myTransport.getID()).andReturn(10);

ID 10 でメソッドを 1 回呼び出すようにしたいのですが、

expect(myTransport.publish(any(...)));

expectLastCall.once();

トランスポート クラスの何かが壊れてmyTransport呼び出されず、テストが失敗します。デバッガーでコードをステップ実行して、テストが失敗した理由を確認したいだけです。そこで、モック化されたオブジェクトの値を確認するためにブレークポイントを追加しmyTransportます。しかし、それらはすべて、ID でさえも「null」と言います。したがって、いくつかの簡単な調査で、これの原因は EasyMock モッククラスであると仮定します。実際には値でオブジェクトを更新せず (これは合理的に聞こえます)、メソッドが呼び出されたときに実行時にモックされた値を返します。

したがって、メソッドが最終的に返す値を確認できる IntelliJ 用のモック対応デバッガーはありますか。

はい、「すべての単体テストを作成する場合、デバッガーは必要ありません」という応答を受け取る前に、それについて知っていることを述べたいと思います。そして、これはレガシー コード、または少なくともテストを念頭に置いて書かれていないコードです。

4

2 に答える 2

1

これはあなたが探しているものではないかもしれません...しかし、問題はデバッグのアプローチにあるように感じます.

モック オブジェクトとは、実際にはモックです。つまり、具体的に指示しない限り何もしない偽の空のオブジェクトです。デバッガーがモック オブジェクトを検査するとき、返すように具体的にプログラムしていない値は見つかりません。値を保持するためのものではありません。

EasyMock には引数キャプチャ機能がありますが、デバッグ用にのみ使用するため、これはおそらく間違ったアプローチです。Mockito には、目的に適したスパイ機能がありますが、追加のモック プログラミング ステートメントが必要になります。

ITransport最も簡単な方法は、テスト クラスで使用するためだけに独自のものを実装することです。getID()そうすれば、常に returnを実装し10て、 assert ステートメントを に入れることができますpublish()。また、デバッグ目的で追加のデータをキャプチャするために必要なその他のメソッドを実装できます。ITransportそして、共有使用または将来のデバッグの必要性のために、このテストのみを維持することができます。

于 2012-11-22T10:04:54.557 に答える
0

実際、メソッドはモックされていますが、クラスの内部実装はそれ自体に任されています。

通常、最初に記録したのは自分であるため、何が返されるかを知る必要はありません。

デバッガーで myTransport.getID() を評価することもできます。しかし、これを行うと、期待が消費されます。

ただし、モックで現在保留中のすべての期待をリストできるようにすることは良い考えのようです。そして多分ピーク機能を持っています。このような機能は、EasyMock バグ トラッカー ( http://jira.codehaus.org/browse/EASYMOCK ) でリクエストできます。

于 2012-11-23T17:16:59.863 に答える