【问题标题】:callback is not called using moq + autofaq使用 moq + autofaq 不调用回调
【发布时间】: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


【解决方案1】:

经过多次测试,我找到了解决方案

   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);
    }

【讨论】:

    猜你喜欢
    • 2023-04-01
    • 2020-02-08
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 2019-05-22
    • 1970-01-01
    • 2012-02-26
    相关资源
    最近更新 更多