2016-10-28 18 views
1

Simple.Mockingを使用してテストでいくつかのインターフェースをモックしています。Simple.Mockingカスタムオブジェクトを使用したメソッド呼び出しの呼び出し

Expect.Once.MethodCall(()=> foo.Show(Any<MyObj>.Value)); 
:いくつかの方法は、私はこのように期待して書く場合にのみ合格 ShowAttrを持つオブジェクトが1に等しいと呼び出された場合でも、カスタム
public class MyObj 
{ 
    public int Attr { get; set; } 

    public override bool Equals(object obj) 
    { 
     return Equals(obj as MyObj); 
    } 

    public override int GetHashCode() 
    { 
     return Attr; 
    } 

    private bool Equals(MyObj myObj) 
    { 
     return Attr == myObj.Attr; 
    } 
} 

public interface IFoo 
{ 
    void Show(MyObj o); 
} 

public class ObjUnderTest 
{ 
    public ObjUnderTest(IFoo foo) 
    { 
     var o = new MyObj{ Attr = 1; }; 
     foo.Show(o); 
    } 
} 

[TestClass] 
public class TestClasse 
{ 
    [TestMethod] 
    public void TestShow() 
    { 
     var foo = Mock.Interface<IFoo>(); 
     var myObj = new MyObj { Attr = 1 }; 
     Expect.Once.MethodCall(() => foo.Show(myObj)); 

     var objectUnderTest = new ObjUnderTest(foo); 

     AssertExpectations.IsMetFor(foo); 
    } 
} 

問題

は、そのテストは常に失敗しているオブジェクトを受け取ります

私は何が必要ではないですか。それらは異なるオブジェクトなので失敗するのは分かっていますが、私はMyObjEqualsGetHashCodeを上書きしようとしました。 すべてのアイデア?

+0

。現在の例は不完全です。 – Nkosi

+0

@いたずらしました! – fivunlm

答えて

1

望ましい結果が入力を検証することである場合は、述語

Expect.Once.MethodCall(()=> foo.Show(Any<MyObj>.Value.Matching(obj => obj.Attr == 1))); 

ソースでexptectationを指定してみてくださいすることができます:Githubの上のプロジェクトのreadme - [MCVE]問題の提供Using "wildcard" parameter values

[TestClass] 
public class TestClasse { 
    [TestMethod] 
    public void TestShow() { 
     //Arrange 
     var foo = Mock.Interface<IFoo>(); 
     Expect.Once.MethodCall(()=> foo.Show(Any<MyObj>.Value.Matching(obj => obj.Attr == 1))); 
     //Act 
     var objectUnderTest = new ObjUnderTest(foo); 
     //Assert 
     AssertExpectations.IsMetFor(foo); 
    } 
} 
+0

私は実際に等価性をチェックする複数のプロパティを持っていますが、あなたのソリューションは機能します。ありがとう! – fivunlm

+0

喜んで助けてください。はい、この回答は、元の質問に基づいて構築するための単なる例にすぎません。ハッピーコーディング!!! – Nkosi

関連する問題