【问题标题】:Expected invocation on the mock once, but was 2 times: m => m.SaveChanges() , UnitTest对模拟的预期调用一次,但为 2 次: m => m.SaveChanges() ,UnitTest
【发布时间】: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 =&gt; m.SaveChanges(), Times.Once());
  • 哦哦哦对不起....天哪,谢谢您,先生。现在我看到了。

标签: c# unit-testing mocking moq


【解决方案1】:

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

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

进入:

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

你可以阅读Times选项here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    相关资源
    最近更新 更多