1
我需要定義在AddOrEdit方法中觸發了不同的方法Add。 add方法添加一個新實例。但是我發現了這個錯誤。 Add方法在調試中起作用。我究竟做錯了什麼?期望調用模擬一次,但是0次
var repository = new Mock<IRepository>();
var layer = new Layer(repository.Object);
// Arrange
var object1=new Object1();
var object2=new Object2();
repository.Setup(a => a.Add<Object1>(new Object1(){Name="Name"}));
// Act
layer.AddOrEdit(object1, object2);
// Assert
repository.Verify(a => a.Add<Object1>(new Object1(){Name="Name"}));
public void AddOrEdit(Object1 object1, Object2 object2))
{
......
......
Add(object2.Name)
}
public void Add(string name)
{
Repository.Add(new Object1(){Name="Name"});
}
更新:
我刪除
repository.Setup(a => a.Add<Object1>(new Object1(){Name="Name"}));
而忽略equals
public override bool Equals(object obj)
{
var item = obj as Object1;
return item != null && this.Name.Equals(item.Name);
}
repository.Verify(a => a.Add<Object1>(new Object1(){Name="Name1"})); // Test Failed
repository.Verify(a => a.Add<Object1>(new Object1(){Name="Name"})); // Test Success
UPDATE2 Andy提供了一個更好的解決方案
repository.Verify(a => a.Add(It.Is<Object1>(y => y.Name == "Name")));
你的'Object1'類型是否覆蓋Equals?如果不是這樣,你可以用另一個參數來調用'Add',這個參數就是你所期待的那個.. –
Thx。 ОverrideEquals解決了問題。 – user2602098
你確定你正確實施了你的班級嗎? Add方法不使用name參數。 –