2015-08-25 5 views
1

У меня есть модульный тест, выполненный с использованием moq для издевательства над объектами, и тест работает нормально, и теперь я хочу использовать autofac + moq, но у меня есть несколько проблем. это испытание:callback не вызывается с помощью moq + autofaq

using (var mock = AutoMock.GetLoose()) 
{ 

    var issues = new List<Issue>(); 
    issues.Add(new Issue { Organization = "org", Repository = "repo", Number = 1 }); 
    issues.Add(new Issue { Organization = "org", Repository = "repo", Number = 2 }); 
    var numKeys = 0; 

    mock.MockRepository.Create<IStorageService>() 
     .Setup(myMock => myMock.GetBatchIssues(It.IsAny<string>(), 
               It.IsAny<string>(), 
               It.IsAny<IList<string>>())) 
     .Callback((string org, string repo, IList<string> keys) => numKeys = keys.Count) 
     .Returns(issues); 

    var sut = mock.Create<IssueReceiveService>(); 

    var check = await sut.CheckInStorage("org", "repo", issues); 
    Assert.AreEqual(issues.Count, numKeys); 
} 

вызова sut.CheckInStorage возвращение нуля, а переменная numKeys не обновляется до правильного значения. Этот тест работает отлично, используя только moxk, поэтому я полагаю, что мне не хватает чего-то, как настроить макет с autoMock. Где я могу найти дополнительную информацию?

UPDATE:

после еще нескольких тестов я нашел решение

 using (var mock = AutoMock.GetLoose()) 
     { 
      var issues = new List<Issue>(); 
      issues.Add(new Issue { Organization = "org", Repository = "repo", Number = 1 }); 
      issues.Add(new Issue { Organization = "org", Repository = "repo", Number = 2 }); 
      var numKeys = 0; 

      mock.Mock<IStorageService>() 
       .Setup(myMock => myMock.GetBatchIssues(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<IList<string>>())) 
       .Callback((string org, string repo, IList<string> keys) => numKeys = keys.Count) 
       .Returns(issues); 

      var sut = mock.Create<IssueReceiveService>(); 

      var check = await sut.CheckInStorage("org", "repo", issues); 
      Assert.AreEqual(issues.Count, numKeys); 
     } 
+0

Вы должны добавить решение как ответьте и отметьте его как принятый, чтобы этот вопрос не остался без ответа. –

ответ

0

после еще нескольких тестов я нашел решение

using (var mock = AutoMock.GetLoose()) 
    { 
     var issues = new List<Issue>(); 
     issues.Add(new Issue { Organization = "org", Repository = "repo", Number = 1 }); 
     issues.Add(new Issue { Organization = "org", Repository = "repo", Number = 2 }); 
     var numKeys = 0; 

     mock.Mock<IStorageService>() 
      .Setup(myMock => myMock.GetBatchIssues(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<IList<string>>())) 
      .Callback((string org, string repo, IList<string> keys) => numKeys = keys.Count) 
      .Returns(issues); 

     var sut = mock.Create<IssueReceiveService>(); 

     var check = await sut.CheckInStorage("org", "repo", issues); 
     Assert.AreEqual(issues.Count, numKeys); 
    }