首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSubstitute误差UnexpectedArgumentMatcherException

NSubstitute误差UnexpectedArgumentMatcherException
EN

Stack Overflow用户
提问于 2018-04-05 10:20:54
回答 4查看 8.5K关注 0票数 6

我得到了以下错误:

NSubstitute.Exceptions.UnexpectedArgumentMatcherException:的参数匹配器(Arg.Is,Arg.Any)只应用于替换成员参数。不要在Returns()语句中或在成员调用之外的任何其他地方使用。正确使用: sub.MyMethod(Arg.Any()).Returns("hi")不正确使用: Sub.MyMethod(“嗨”).Returns(Arg.Any())‘

当尝试模拟以下接口时:

代码语言:javascript
复制
public interface IMyDate
{
    DateTime GetDate();
}

这里是我嘲笑它的地方:

代码语言:javascript
复制
var myDate = Substitute.For<IMyDate>();
myDate.GetDate().Returns(testDate); // Error thrown here

有人能解释一下我做错了什么吗?

代码语言:javascript
复制
var myDate = Substitute.For<IMyDate>();
myDate.GetDate().Returns(new DateTime(2018, 04, 05)); // Error thrown here

给出同样的结果。

EN

回答 4

Stack Overflow用户

发布于 2018-04-05 22:53:36

这可能是由于早期测试的问题所致。有关跟踪此问题的一些步骤,请参见这个答案。我在下面列出了这个答案的快照:

这很像以前使用参数匹配器对非虚拟方法进行的测试,或者在返回语句中进行的测试。 不幸的是,这可能是相当棘手的调试。第一步是查看在此夹具中运行所有测试时是否会出现问题。如果是,请检查该夹具中Arg.Is|Any的所有使用,首先是在测试失败之前运行的使用(如果您的测试框架使用可预测的测试顺序,则需要查看测试日志以查看哪些测试进行失败的测试)。 如果该夹具没有发生这种情况,则需要查看预先运行的夹具,以确定arg matcher的剩余部分来自何处。它很有可能接近失败的测试。

希望这能有所帮助。在积极的消息中,下一个NSubstitute版本(v4)将在这些情况下提供更多的帮助。

另见:如何不使用参数匹配器

票数 4
EN

Stack Overflow用户

发布于 2018-04-05 10:36:57

testDate很可能是一个参数匹配器(Arg.IsArg.Any)

异常消息告诉您只使用参数匹配器作为成员调用参数,而不是作为返回值,但您正在使用它作为返回值.

“不要在Returns()语句中使用,也不要在成员调用之外的任何地方使用”

试一试

代码语言:javascript
复制
var testDate = new DateTime(); //<-- try setting the desired date as needed
var myDate = Substitute.For<IMyDate>();
myDate.GetDate().Returns(testDate);

参考NSubstitute:论点匹配者

票数 2
EN

Stack Overflow用户

发布于 2021-07-22 21:26:44

在我们的示例中,一个随机测试发送此错误消息,但只在运行所有测试时才发送。当我们从4.6.1迁移到netcore 3.1时,我们发现了这个错误。

问题是,一个没有任何替代的测试类正在使用Arg.Any<int>()表示,原因不明。

删除--这是未受影响的代码段-- Arg.Any<int>()是解决方案。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49669935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档