【问题标题】:An expression tree may not contain a call or invocation that uses optional arguments in moq framework表达式树可能不包含在 moq 框架中使用可选参数的调用或调用
【发布时间】:2015-11-25 19:16:15
【问题描述】:

在更新基于 .netcore beta 5 并更新到 rc1 的项目后,起订量出现问题。在更新之前,进行了测试,现在我有错误:“表达式树可能不包含使用可选参数的调用或调用”。请帮我解决它。

[Fact]
public async void ReturnPostUserAnswerResult()
{
    // Arrange
    var mockSet = new Mock<DbSet<QuestionsToUsers>>();
    var _applicationDbContext = new Mock<ApplicationDbContext>();
    _applicationDbContext.Setup(a => a.QuestionToUsers).Returns(mockSet.Object);
    var controller = new UserQuizController(_applicationDbContext.Object);
    // Act
    var result = new QuestionsToUsers()
    {
        Answer = true,
        QuestionID = 99,
        TestpackID = 99,
        Id = 99,
        UserID = "TestUser"
    };
    await controller.PostUserAnswerResult(result);

    mockSet.Verify(m => m.Add(It.IsAny<QuestionsToUsers>())); //here error
}

【问题讨论】:

  • 那么Add 方法(DbSet&lt;&gt;)现在的签名是什么?您会收到此线程当前标题中提到的编译时错误,因为Add 有一个可选参数。您必须在 lambda 中明确给出可选值,或者使用It.IsAny&lt;&gt;()

标签: asp.net unit-testing moq xunit


【解决方案1】:

问题被问了一段时间,但今天我遇到了同样的问题。

在测试公共交通消费者时,我需要验证 ConsumeContext .Defer 方法。

我刚刚换了

_mockConsumeContext.Verify(cc => cc.Defer(It.IsAny<TimeSpan>()), Times.Once);

_mockConsumeContext.VerifySet(cc => cc.Defer(It.IsAny<TimeSpan>()), Times.Once);

它解决了我的问题,也许也可以解决你的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-06
    • 2021-10-21
    • 1970-01-01
    • 2017-10-28
    • 1970-01-01
    • 2011-08-29
    • 2019-08-03
    • 1970-01-01
    相关资源
    最近更新 更多