gpt4 book ai didi

c# - 预期对模拟调用一次,但调用了 2 次 : m => m. SaveChanges() , UnitTest

转载 作者:太空狗 更新时间:2023-10-30 00:50:26 26 4
gpt4 key购买 nike

我在测试这个方法时遇到了问题。

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。我尝试按照说明实现 Here

[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 绑定(bind),但我不知道如何去做。我不确定我哪里出错了。任何帮助将不胜感激。

最佳答案

AddUrl 方法中,您调用了两次 SaveChanges 方法。要验证此行为,您需要更改:

mockContext.Verify(m => m.SaveChanges(), Times.Once());

进入:

mockContext.Verify(m => m.SaveChanges(), Times.Exactly(2));

您可以阅读有关 Times 选项的信息 here

关于c# - 预期对模拟调用一次,但调用了 2 次 : m => m. SaveChanges() , UnitTest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31523431/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com