2016-04-26 9 views
0

FakeItEasyを使用してテストを行っていますが、問題が発生しました。 期待されたデータが偽装されたサービスに送信されることをテストするとき、私はエラーデータも見ることができるようにしたいと思います。 今私は、呼び出しが起こったことがないことがわかります。 多分私はそれを間違って設定しているかもしれませんが、それを修正する方法についていくつかのヒントがあります。 :)FakeItEasyでメソッドのパラメータを確認する方法と、呼び出しが行われたことを確認する方法

私の場合は: 同じサービスを別々の値で2回呼び出します。 私はそれぞれの呼び出しを確認するために別々のテストが必要です。 いずれかのパラメータに期待値がない場合は、それを示すエラーメッセージが表示されます。 Assert.AreEqual()の場合と同様です。

今私は「コールは起こらなかった」ということを理解しています。これは私がテストしていることを実感しているからです。しかし、特定の呼び出しが1回だけ行われたことを確認できるようにしたいと思います。発生しなかった場合は、どの値が使用されていないかを確認したいと思います。

私はこのソリューションを使用しました:http://thorarin.net/blog/post/2014/09/18/capturing-method-arguments-on-your-fakes-using-fakeiteasy.aspx 私は1回しかコールしていませんが、2回のコールでは機能しません。

[TestFixture] 
public class TestClass 
{ 
    [Test] 
    public void TestOne() 
    { 
     // Arrange 
     var fake = A.Fake<IBarservice>(); 
     var a = new Foo(fake); 

     // Act 
     a.DoStuff(1); 

     //Assert 
     A.CallTo(() => fake.DoOtherStuff(A<int>.That.Matches(x => x == 2))).MustHaveHappened(Repeated.Exactly.Once); 
    } 

    [Test] 
    public void TestTwo() 
    { 
     // Arrange 
     var fake = A.Fake<IBarservice>(); 
     var a = new Foo(fake); 

     // Act 
     a.DoStuff(1); 

     //Assert 
     A.CallTo(() => fake.DoOtherStuff(A<int>.That.Matches(x => x == 3))).MustHaveHappened(Repeated.Exactly.Once); 
    } 
} 

public class Foo 
{ 
    private readonly IBarservice _barservice; 

    public Foo(IBarservice barservice) 
    { 
     _barservice = barservice; 
    } 

    public void DoStuff(int someInt) 
    { 
     someInt++; 
     _barservice.DoOtherStuff(someInt); 
     // I should have increased someInt here again, but this is a bug that my tests catches 
     _barservice.DoOtherStuff(someInt); 
    } 
} 

public interface IBarservice 
{ 
    void DoOtherStuff(int someInt); 
} 

答えて

1

Markus、私は誤りがあったので、私は編集したというコメントを持っていました。

はあなたが唯一の「コールは起こらなかった」と

...私は、特定の呼び出しは一度だけ行われたことを確認できるようにしたいと思い、それが実現しなかった場合、私は希望を得ると言いますそれが起こらないためにどの値が使用されていたかを確認します。

私はあなたが望んでいたものな情報を理解していない恐れて、私はTestOneを実行したとき以来、私は

FakeItEasy.ExpectationException 

    Assertion failed for the following call: 
    FakeItEasyQuestionsVS2015.IBarservice.DoOtherStuff(<x => (x == 2)>) 
    Expected to find it exactly once but found it #2 times among the calls: 
    1: FakeItEasyQuestionsVS2015.IBarservice.DoOtherStuff(someInt: 2) repeated 2 times 
    ... 

を得るこれは、コールDoOtherStuffは次のように渡されたsomeIntで、二回行われたことを言います毎回値2

関連する問題