NSubstitute测试单独工作,但在套件中抛出Unexpected Matcher Argument

我有一个unit testing,我使用.Returns()来返回一些示例数据:

[TestMethod] public void TestRetrieveElementsInVersion() { IRetrieveElementSequence component = Substitute.For(); List list = new List { new UnconstructedElement{Version = "1"}, new UnconstructedElement{Version = "2"} }; component.RetrieveElements().Returns(list); // exception reported here const string target = "1"; IRetrieveElementSequence service = new RetrieveElementsInAVersion(component, target); IList result = service.RetrieveElements(); bool check = result.All(e => e.Version == target); Assert.IsTrue(check); } 

当测试单独运行时,此代码使用ReSharper运行程序在Visual Studio中传递。 它作为列表的一部分运行时失败,就像我从解决方案运行所有测试一样。

NSubstitute.Exceptions.UnexpectedArgumentMatcherException:参数匹配器(Arg.Is,Arg.Any)只应用于代替成员参数。 不要在Returns()语句或成员调用之外的任何其他地方使用。

我不知道我在哪里使用Arg.Any或Arg.Is. 我在做什么让NSubstitute抱怨? 当我使用.Returns()返回非本机对象列表时会发生这种情况。

这很大程度上是由于先前使用参数匹配器对非虚方法或者Returns语句进行的测试。

不幸的是,调试起来非常棘手。 第一步是查看在此夹具中运行所有测试时是否出现问题。 如果是这样,请检查该夹具中Arg.Is|Any所有用法,从在测试失败之前运行的那个开始(如果您的测试框架使用可预测的测试订单,否则您需要查看测试日志到看看哪些测试进行了失败的测试。

如果没有使用该夹具,您需要查看预先运行的夹具,以查看左侧arg匹配器的来源。 它很可能在失败的测试附近。