【发布时间】:2015-11-19 11:24:21
【问题描述】:
我使用 moq 完成了一个单元测试来模拟对象,并且测试工作正常,现在我想使用 autofac +moq,但我遇到了一些问题。 这是测试:
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 调用返回 null,变量 numKeys 未更新为正确值。这个测试只使用 moxk 就可以正常工作,所以我想我错过了一些如何使用 autoMock 配置模拟的东西。 在哪里可以找到更多信息?
更新:
经过多次测试,我找到了解决方案
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);
}
【问题讨论】:
-
您应该将解决方案添加为答案并将其标记为已接受,这样这个问题就不会显得未回答。
标签: c# unit-testing moq autofac