私はMachine.Fakesで難局を打ちました。私はout
パラメータを模倣する方法を理解することができませんのみ Machine.Fakes機器。 RhinoMocksのa bugのため、私はMakeアダプタをFakeItEasyに切り替えました。私が知る限り、どのアダプタも交換可能でなければなりません。モックフレームワークとは独立してMachine.Fakesで 'out'パラメータをモックするにはどうしたらいいですか?
Arg
はRhino.Mocksなので、これにより "out"テストが失敗し、このように見えるものはコンパイルされなくなるという問題があります。
The<IMembershipService>()
.WhenToldTo(x => x.CreateUser(Param<string>.IsAnything,
Param<bool>.IsAnything,
Param<object>.IsAnything,
out Arg<MembershipCreateStatus>
.Out(MembershipCreateStatus.UserRejected)
.Dummy))
.Return(user);
私は元Arg<T>
paramはそれを設定値と同じ値に設定された「ダミー」のローカル変数を、使用してみましたが、これは私のテストが失敗する原因となった - 値がされていないかのように思えます通りました! Arg<T>
には本当に解決策がありましたが、Rhino.Mocksの一部であるため、これ以上使用することはできません。
+1これはvoidメソッドでのみ動作するようですか?多くの場合、 'out'パラメータが追加の戻り値を返すために使用されているため、少し制限があるようです。 – MattDavey
はい、@MattDavey、私はvoidメソッドのためにこれを実装しました。私はそれが制限されていることに同意しますが、それをクエリ用に実装するとAPIが複雑になります。 –
さらに、outパラメータのサポートは、元々実装されていませんでした。 .NET Frameworkでもパラメータを使用しているので、これは価値のある選択肢だと思います。しかし、私は、戻り値と1つのメソッドのoutパラメータが良い設計であると言っています。私はタプルを返すか、複数のパラメータを持つと言うでしょう。だから、私はMFakesをこのように強く主張し続けました。 –