2016-12-02 4 views
2

に予期しないMatcherの引数をスロー:NSubstituteテストは、それ自体で動作しますが、私はいくつかのサンプルデータを返すために.Returnsを()を使用するユニットテストを持っているスイート

[TestMethod] 
    public void TestRetrieveElementsInVersion() 
    { 
     IRetrieveElementSequence component = Substitute.For<IRetrieveElementSequence>(); 
     List<UnconstructedElement> list = new List<UnconstructedElement> 
     { 
      new UnconstructedElement{Version = "1"}, 
      new UnconstructedElement{Version = "2"} 
     }; 
     component.RetrieveElements().Returns(list); // exception reported here 
     const string target = "1"; 
     IRetrieveElementSequence service = new RetrieveElementsInAVersion(component, target); 
     IList<UnconstructedElement> result = service.RetrieveElements(); 
     bool check = result.All(e => e.Version == target); 
     Assert.IsTrue(check); 
    } 

このコードは、使用してVisual Studioで渡しますReSharperランナー、テストが単独で実行されるとき。ソリューションからすべてのテストを実行するときなど、リストの一部として実行されると失敗します。

NSubstitute.Exceptions.UnexpectedArgumentMatcherException:引数マッチャ(Arg.Is、Arg.Any)は、メンバ引数の代わりに使用する必要があります。 Return()ステートメントまたはメンバー呼び出し外のどこでも使用しないでください。

Arg.AnyまたはArg.Iを使用している場所が表示されません。 NS substituteが文句を言うのは何ですか?これは、.Returns()を使用して非ネイティブオブジェクトのリストを返すときに発生します。

答えて

4

これは、非仮想メソッドまたはReturnsステートメントでの引数マッチャーを使用した以前のテストのために最もよく似ています。

残念ながら、これはデバッグするのが非常に難しい場合があります。最初のステップは、このフィクスチャですべてのテストを実行するときに問題が発生するかどうかを確認することです。もしそうなら、テストの直前に実行されているものから始めて、そのフィクスチャのArg.Is|Anyのすべての使用をチェックします(テストフレームワークが予測可能なテストオーダーを使用している場合は、テストログを見て、失敗したもの)。

もしそのフィクスチャーで発生しないのであれば、あらかじめ実行されているフィクスチャーを見て、残っているargマッチャーがどこから来ているのかを調べる必要があります。失敗したテストの近くのどこかにある可能性が高いです。

+0

Arg.Any が、失敗したテストの直前のテストで誤って使用されていました。ありがとうございました。 –

関連する問題