所以我在我的测试中使用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));
MyObj
和Equals
但没有成功。
任何想法?
答案 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);
}
}