2

NMock2.0 に関するドキュメントではわからなかった簡単な質問があります。

モックアウトしたい Save() という関数があります。これは、文字列 ID をパラメーターとして取り、10 進数を値として取ります。

Save() が2つの特定の値で呼び出されることを確認するためにこれを書くことができることを私は知っています:

    Expect.Once.On(dao) _
    .Method("Save").With(New Object() {"foo", 1})

ただし、これは「foo」と 1 が渡された場合にのみ渡されます。値「foo」を制御できますが、2 番目の値については、それがどうなるかわかりません。または、少なくともこの特定のテストで値がどうなるかをテストすることは気にしません。

私は書くことができることを知っています:

    Expect.Once.On(dao) _
    .Method("Save").WithAnyArguments()

しかし、これにより、私はあらゆる議論を渡すことができます。そのため、保存インターフェイスが変更され、後で 5 つのパラメーターを受け取る場合でも、テストはパスします。

適切なタイプの2つのパラメーターのみを受け取るようにするにはどうすればよいですか?

おそらくもっと重要なことですが、このような単体テストを書くのは脆すぎますか? たぶん、パラメータを期待するようにコーディングして、リファクタリングするたびに戻ってその行を変更する必要がないようにする必要がありますか? 多くのモックを使用するテスト ケースは非常に脆弱であり、リファクタリングするたびにそれらを変更する必要があることがわかりました...ここでモックを誤用しているのでしょうか? このようなことはまだかなり新しいので、アドバイスをいただければ幸いです。

4

2 に答える 2

5

マッチャーを使用してIs.TypeOf()、値に関係なく特定の型を照合します。次のようなものが必要です。

Expect.Once.On(dao).Method("Save").With(Is.TypeOf(typeof(string)));

それが合理的かどうかについては、メソッドが指定された入力型のパラメーターを処理できることを確認しようとしている場合、一般的なケースではこれで問題ないと思います。たとえば、 ;Carを期待するメソッドに a を渡すとします。Vehicleメソッドが派生型を正しく処理できることを確認すると便利です。

于 2009-12-14T15:34:00.627 に答える
2

簡単なクラスを作成できます。

class DontCare
{
    public override bool Equals(object obj)
    {
        return true;
    }
}

Expect.Once.On(dao).Method("Save").With(new DontCare());
于 2011-07-11T13:26:30.080 に答える