[英]Expected invocation on the mock once, but was 2 times: m => m.SaveChanges() , UnitTest
請我在測試此方法時遇到問題。
public class EFUrlRepository : IUrlsRepository
{
public EFDbContext context = new EFDbContext();
private Security security = new Security();
public IQueryable<Url> Urls
{
get { return context.Urls; }
}
public bool AddUrl(Url url)
{
if(url.UrlId == 0)
{
context.Urls.Add(url);
context.SaveChanges();
url.UrlCode = security.Encrypt(url.UrlId.ToString());
context.SaveChanges();
return true;
}
return false;
}
}
我正在嘗試測試上面類的addUrl。 我試着像這里解釋的那樣實現
[TestMethod]
public void CreateUrl_saves_a_url_via_context()
{
var mockSet = new Mock<DbSet<Url>>();
var mockContext = new Mock<EFDbContext>();
mockContext.Setup(m => m.Urls).Returns(mockSet.Object);
var repository = new EFUrlRepository();
Url url = new Url()
{
UrlCode = "TYUyR",
OriginalUrl = "https://fluentvalidation.com",
IpAddress = "127.0.0.1",
PostedDate = DateTime.Now
};
repository.context = mockContext.Object;
repository.AddUrl(url);
mockSet.Verify(m => m.Add(It.IsAny<Url>()), Times.Once());
mockContext.Verify(m => m.SaveChanges(), Times.Once());
}
我的測試失敗並拋出上面標題中提到的異常。 請問可能是什么問題。 我懷疑我的EFDContext綁定,但我不知道如何去做。 我不確定我哪里出錯了。 任何幫助,將不勝感激。
在AddUrl
方法中,您可以調用SaveChanges
方法兩次。 要驗證此行為,您需要更改:
mockContext.Verify(m => m.SaveChanges(), Times.Once());
成:
mockContext.Verify(m => m.SaveChanges(), Times.Exactly(2));
你可以在這里閱讀有關Times
選項
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.