【发布时间】:2015-07-20 18:10:19
【问题描述】:
请我在测试此方法时遇到问题。
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 绑定,但我不知道该怎么做。我不确定我哪里出错了。任何帮助将不胜感激。
【问题讨论】:
-
您调用
SaveChanges两次,但断言它将被调用一次。你在期待什么? -
嗯,我如何调用两次先生?我在这里调用
mockContext.Verify(m => m.SaveChanges(), Times.Once()); -
哦哦哦对不起....天哪,谢谢您,先生。现在我看到了。
标签: c# unit-testing mocking moq