1

NMockを使用した単体テストの作業を始めたばかりです

私のテスト ケースの 1 つは、テスト対象のユニットに渡される辞書にエントリを追加することです。マップを次のように定義します。

var item = new Mock<MyClass>().Object;
var myMap = new Dictionary<MyClass, IList<MyOtherClass>> 
             { 
                { item, completionRequirement }
             };

ただし、myMap.ContainsKey(item)テスト対象のユニット内で実行すると、 が返されますfalse

ディクショナリの検査時に、プロキシされたアイテムを表示できます。item私は、モックされた.(おそらく を定義する)で何か他のことをする必要があると推測しています.Equals(object o)

私の質問は:

  • mocked の Equals(object o) をどのように定義しますかitem
  • または、問題に対する別の解決策がまったくありますか。
4

3 に答える 3

6

辞書もモックしたいかもしれません。つまり、使用するようにリファクタリングしてからIDictionary<MyClass,IList<MyOtherClass>、モック化された辞書を渡します。その後、必要に応じてモック オブジェクトを返すように期待値を設定できます。

この場合、モックをまったく使用する必要がない可能性もあります。あなたが私たちに与えたものから判断することはできませんが、モックに慣れていない人は、それらのオブジェクトにカスケード依存関係がない場合、実際のオブジェクトも使用できることを忘れることがあることがよくあります. たとえば、単なるコンテナであるクラスをモックする必要はありません。代わりに作成して使用してください。ちょうど考えるべきこと。

于 2011-12-10T16:48:55.917 に答える
0

私は、tvanfosson が提案していることに沿って「偽の」オブジェクトを設定するというアイデアが好きです。

しかし、モッキング フレームワークでそれを行いたい場合は、item.Object がどうあるべきかについての期待を設定するだけでよいと思います。Rhino Mocks では、構文は次のようになります。

var knownObject = "myKey";
var mock = MockRepository.GenerateStub<IMyClass>();
mock.Stub(x=>x.Object).Return(knownObject);

とはいえ、NMocks で同等のコードがどのようなものになるかはわかりませんが、それを使用している場合は、それを理解するのは難しくありません (ユーザー グループでいつでも質問できます)。

HTH

于 2011-12-10T18:46:34.283 に答える
0

http://richardashworth.blogspot.com/2011/12/using-reflection-to-create-mock-objects.htmlに示されているアプローチは Java ですが、リフレクションを使用してこの問題に対する別のアプローチを示しています。

于 2012-01-02T20:38:26.890 に答える