2011-07-12 9 views
0

作成サービスをテストするユニットテスト(typemock 5.4.5.0を使用)があります。作成サービスは、コンストラクタの検証サービスで渡されます。検証サービスは、ブール値プロパティ(IsValid)を持つオブジェクトを返します。私の単体テストでは、IsValidがtrueに設定されているインスタンスを返すための検証サービス呼び出しを嘲笑しています。作成サービスには、そのプロパティの値をチェックするif文があります。単体テストを実行すると、検証サービスから返されたオブジェクトのプロパティはtrueに設定されますが、if文が実行されるとfalseのように扱われます。真に設定された擬似オブジェクトは、偽のように扱われています。

これはユニットテストをデバッグすることで確認できます。検証サービスから返されたオブジェクトは実際にはIsValidプロパティがtrueに設定されていますが、if文の本文をスキップしてEnd Ifに移動します。ここで

は、ユニットテスト自体へのリンクです - 地獄IsValidプロパティがtrueであるが、ある理由https://gist.github.com/1076376

誰もが知っている - ここでhttps://gist.github.com/1076372

は、私がテストしてい作成サービス機能へのリンクですそれは偽であるように扱われる?

P.S.私はTypeMockのサポートシステムでこの問題にも入りましたが、おそらくここでより迅速な対応が得られるでしょう!

答えて

0

まず、可能な場合は、ライセンス対象のTypemock Isolatorの最新バージョンにアップグレードすることをおすすめします。出てくる各バージョンには、マイナーリリースでさえ、興味深いエッジケースの修正が含まれています。アップグレードを行うと時々問題が解決されることがわかりました。

次に、私はあなたのユニットテストでは、この行を参照してください。

Isolate.WhenCalled(() => validator.ValidateNewQuestionForExistingQuestionPool(new QuestionViewModel())).WillReturn(new Validation(true)); 

私のために赤旗が「新しいQuestionViewModel()」とは「WhenCalled()」ブロック内だです。親指の

二つの良いルールは、私はいつも、次のとおりです。

  1. あなたが嘲笑したくないWhenCalled()には何も入れないでください。
  2. 引数を気にしない場合は、実際の引数を渡さないでください。

この場合、最初のルールは「私はQuestionViewModelのコンストラクタを嘲笑したくないので、そこに置くべきではありません」と考えています。

"ValidateNewQuestionForExistingPool"メソッドの引数が本当に重要でないかどうかを検討します。この場合、実際のオブジェクトではなくヌルを渡すことになります。あなたが特に見ているオーバーロードがある場合は、最初にnullをキャストします。

最後に、その最初のルールに基づいて並べ替えますが、私は通常、戻り値もインライン化しないようにします。つまり、Isolate呼び出しの前に新しいValidationオブジェクトを作成します。

var validation = new Validator(true); 
Isolate.WhenCalled(() => validator.ValidateNewQuestionForExistingQuestionPool(null)).WillReturn(validation); 

これがどのように動作するかをご覧ください。また、Typemock Tracerユーティリティを見て、テストを実行して期待値が設定されていないことを確認することもできます。期待する

関連する問題