c# – NSubstitute测试单独工作,但在套件中抛出Unexpected Match
我有一个单元测试,我使用.Returns()返回一些示例数据:
[TestMethod] public void TestRetrieveElementsInVersion() { IRetrieveElementSequence component = Substitute.For<IRetrieveElementSequence>(); List<UnconstructedElement> list = new List<UnconstructedElement> { 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<UnconstructedElement> 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()返回非本机对象列表时会发生这种情况. 解决方法
这很大程度上是由于先前使用参数匹配器对非虚方法或者返回语句进行的测试.
不幸的是,这可能是非常棘手的调试.第一步是查看在此夹具中运行所有测试时是否出现问题.如果是这样,请检查该夹具中Arg.Is | Any的所有用法,从在测试失败之前运行的那个开始检查(如果您的测试框架使用可预测的测试订单,否则您需要查看测试日志到看看哪些测试进行了失败的测试. 如果没有使用该灯具,您需要查看预先运行的灯具,以查看左侧arg匹配器的来源.它很可能是在失败测试附近的某个地方. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |