簡體   English   中英

預期對該模擬調用一次,但為0次

[英]Expected invocation on the mock once, but was 0 times

我需要定義在方法AddOrEdit中觸發了另一個方法Add。 add方法添加一個新實例。 但是我發現了錯誤。 Add方法可在調試中使用。 我究竟做錯了什么?

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"}));

並覆蓋等於

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")));

我認為您應該在驗證電話中使用

It.Is<Object1>(y => y.Name == "Name")

這將驗證調用,並且您無需僅出於測試目的就重寫類中的equals。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM