C# 为什么使用NSubstitue.Arg.Any<;字符串>;在一组单元测试中,会导致另一组中的最后一个测试失败

C# 为什么使用NSubstitue.Arg.Any<;字符串>;在一组单元测试中,会导致另一组中的最后一个测试失败,c#,unit-testing,nunit,resharper,nsubstitute,C#,Unit Testing,Nunit,Resharper,Nsubstitute,我们遇到了一个非常奇怪的错误,即使用一组新的单元测试运行完整的单元测试套件时,总是会在新部分的最后一次测试运行中失败(在Unity3D项目中使用ReSharper和NUnit)。然而,单独运行新的测试集,所有测试都会通过 奇怪的是,更改失败单元测试的命名会导致整个套件以看似随机的方式通过。我们删除了世界“\u Multiple”,它似乎可以工作,直到我们添加了一个新的测试,该测试失败了,但里面根本没有“\u Multiple”这个词。在这一点上,我知道发布的命名只是一个转移视线的问题,而不是问题

我们遇到了一个非常奇怪的错误,即使用一组新的单元测试运行完整的单元测试套件时,总是会在新部分的最后一次测试运行中失败(在Unity3D项目中使用ReSharper和NUnit)。然而,单独运行新的测试集,所有测试都会通过

奇怪的是,更改失败单元测试的命名会导致整个套件以看似随机的方式通过。我们删除了世界“\u Multiple”,它似乎可以工作,直到我们添加了一个新的测试,该测试失败了,但里面根本没有“\u Multiple”这个词。在这一点上,我知道发布的命名只是一个转移视线的问题,而不是问题的真正原因。它也在多台机器上进行了测试,并且总是经历相同的行为

当我们使用一套使用Arg.Any的单元测试在基本上运行的非NSubstitute对象上运行时,我们最终缩小了故障范围

Assert.That(!string.Equals("Desired Value", Arg.Any<string>()));
Assert.That(!string.Equals(“所需值”,Arg.Any()));
一旦我们发现很明显我误用了Arg.Any()函数


我的问题是,为什么更改函数名会影响测试?为什么将所有测试重命名为test1()、test2()、test3()等,每次都能让所有测试通过,而一个更具描述性的名称却不能通过

NSubstitute使用静态执行可怕的操作,以获得其特定的语法
Arg.xyz
调用将参数规范添加到全局队列,一旦调用了替换,这些参数规范将被清除


我猜更改测试的名称会导致测试运行顺序的更改,从而导致问题被暴露或隐藏。在一个特定的排序中,调用一个替换,该替换清除错误的
Arg.Any()
规范,而在另一个排序中,该规范导致实际调用被视为配置存根值,或者由于不匹配的论点而抛出。

很高兴知道我们看到的事实至少有一些依据!谢谢你的信息!