预期对模拟调用一次,但调用了 2 次:m => m.SaveChanges() , UnitTest
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;
}
}
我正在尝试测试上面 class 的 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 绑定,但我不知道如何去做。我不确定我哪里出错了。任何帮助将不胜感激。
在方法 AddUrl
中,您调用了方法 SaveChanges
两次。
要验证此行为,您需要更改:
mockContext.Verify(m => m.SaveChanges(), Times.Once());
进入:
mockContext.Verify(m => m.SaveChanges(), Times.Exactly(2));
您可以阅读 Times
个选项 here
我在测试这个方法时遇到了问题。
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;
}
}
我正在尝试测试上面 class 的 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 绑定,但我不知道如何去做。我不确定我哪里出错了。任何帮助将不胜感激。
在方法 AddUrl
中,您调用了方法 SaveChanges
两次。
要验证此行为,您需要更改:
mockContext.Verify(m => m.SaveChanges(), Times.Once());
进入:
mockContext.Verify(m => m.SaveChanges(), Times.Exactly(2));
您可以阅读 Times
个选项 here