1

NMock3 は私が選んだモッキング フレームワークですが、やりたいことを実現するのに苦労しています。

私が必要としているのは、期待が満たされたときに受け取ったいくつかのパラメーターに基づいて、期待の一部として新しいオブジェクトを構築して返すことです。

例えば:

var mockFactory = new MockFactory();
var mockA = mockFactory.CreateMock<ObjectA>();
mockA.Expects.One.Method(c => c.BuildObjectB(null))
  .With(Is.TypeOf(typeof(string)))
  .WillReturn(new ObjectB(<?>));

WillReturn で ObjectB を新しくするとき、期待値が受け取った引数にどのようにアクセスできますか? これはNMock3でも可能ですか?

ありがとう!

4

2 に答える 2

1

NMock3 ライブラリではこれができないと思います。ドキュメントはまばらですが、NMock3 の受け入れテストを調べたところ、このようなことを行うものは見つかりませんでした。

これは非常に悪いことだとは思いません。単体テストは一般に決定論的であるため、の値がどうなるかを事前に知ることStringができます。単体テストは、自分自身を繰り返すことが良いことの 1 つの場所です。これにより、テストがより簡単になり、読みやすくなります。したがって、あなたの例では、シンプルだが完全に読みやすいものを選ぶと思います

var mockFactory = new MockFactory();
var mockA = mockFactory.CreateMock<ObjectA>();
mockA.Expects.One.Method(c => c.BuildObjectB("Frank")).WillReturn(new ObjectB("Frank"));

DateTimeたとえば、 aが返され、それがどれになるかが事前にわからない(まれな)非決定論的なケースをいくつか考えることができます。または、関数がさまざまな引数で何度も呼び出される可能性があります。そのような場合、呼び出された回数を追跡する単純なスタブを使用できます。

于 2013-02-13T09:44:03.593 に答える
0

Collect.MethodArgument を使用できます。

var mockFactory = new MockFactory();
var mockA = mockFactory.CreateMock<ObjectA>();
mockA.Expects.One.Method(c => c.BuildObjectB(null))
  .With(Is.TypeOf(typeof(string)))
  .WillReturn(Collect.MethodArgument<string>(0, delegate(string myString) { new ObjectB(myString); }));
于 2016-09-14T08:00:58.637 に答える