【问题标题】:.Net Core Moq: An expression tree may not contain a call or invocation that uses optional arguments.Net Core Moq:表达式树可能不包含使用可选参数的调用或调用
【发布时间】:2018-10-20 01:29:38
【问题描述】:

使用 .net core xunit 和 moq。

在编写测试用例时,我遇到了错误”

An expression tree may not contain a call or invocation that uses optional arguments    

错误在线:

var moqDb = new Mock<IDynamoDbClientInitialization>();
moqDb
 .Setup(_ => _.GetContext().ScanAsync<MyModel>
 (It.IsAny<List<ScanCondition>>(), AWSHelperMethods.GetDynamoDbOperationConfig(dynamoDbTable)).GetRemainingAsync())
.ReturnsAsync(data);

有关此代码的完整代码,请参阅以下帖子: .Net core testing with Xunit

任何人都可以在这里帮助解决我的错误。

这篇文章是为了解决我遇到的错误,而不是要求写单位案例

【问题讨论】:

  • 请保持 Stackoverflow 干燥。 :-)
  • 它不重复。上面那篇文章我开始问如何编写单元测试。这篇文章是针对我在测试中遇到的错误。他们怎么可能是同一个帖子?
  • 您在两个问题中都引用了相同的错误。其他帖子:“上面我收到的错误是:表达式树可能不包含使用可选参数的调用或调用”,另外,其他帖子有一个答案,它在这里回答了您的问题。

标签: c# asp.net-core moq xunit.net


【解决方案1】:

moqDb 是 Mock 的实例:

moqDb
 .Setup(_ => _.GetContext().ScanAsync<MyModel>

在这部分代码中,您尝试“调用”尚未设置 GetContext() 的方法 ScanAsync。要解决此问题,您必须在尝试设置 ScanAsync() 之前设置 GetContext() 的返回值

【讨论】:

  • 对不起,我是所有这些单元测试的新手。你能告诉我如何正确设置它。当我声明 var moqDb = new Mock(); 时,我以为我已经做到了
  • 谢谢。只是给你一点信息。我要做的就是为我的 api 编写测试用例,它有大约 3-4 个端点。并想知道如何为此编写测试用例。如果有问题,我可以绕过 dynamo db 模拟并仅测试其他部分。我想要的只是一个完整的测试,这样我就可以为我的其他端点编写和应用相同的测试。感谢您的调查。
猜你喜欢
  • 1970-01-01
  • 2012-09-06
  • 2021-10-21
  • 1970-01-01
  • 2017-10-28
  • 1970-01-01
  • 2011-08-29
  • 1970-01-01
  • 2018-02-22
相关资源
最近更新 更多