Simple.Mocking Expect方法调用自定义对象

时间:2016-10-28 11:39:01

标签: c# unit-testing

所以我在我的测试中使用Simple.Mocking来模拟一些接口。一些方法接收自定义对象

<button ng-click="download()"> Download Excel </button>

问题是测试总是失败,即使用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); } } 等于1的对象调用Show。只有当我写下这样的期望时才会通过:

Attr

这不是我需要的。我知道它失败了因为那些是不同的对象,但我尝试覆盖Expect.Once.MethodCall(()=> foo.Show(Any<MyObj>.Value)); MyObjEquals但没有成功。 任何想法?

1 个答案:

答案 0 :(得分:1)

如果想要的结果是验证输入,您可以尝试使用谓词指定exptectation

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

资料来源:关于Github的项目自述文件 - 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);
    }
}