我遇到了一个问题,即使用visual studio在我的本地计算机上测试成功但是当我的CI Build在我的TFS服务器上运行它们时它们会失败。
这里是失败的行和上下文的前一行。
var mockEventRepository = Substitute.For<IEventRepository>();
mockEventRepository.GetAll().ReturnsForAnyArgs(r => new List<Event>().AsQueryable());
请注意,没有争论者!整个测试中没有一个。
TFS会给出错误:
NSubstitute.Exceptions.UnexpectedArgumentMatcherException:参数匹配器(Arg.Is,Arg.Any)应仅用于代替成员参数。不要在Returns()语句或成员调用之外的任何其他地方使用。
简而言之,错误在发生时似乎是一致的(相同的错误),但它们似乎也会随机发生或不发生。
例如......在原始版本失败后排队后续相同版本后,它才成功。然而,当它尝试使用具有不同但相似且错误的错误的不同配置的相同构建时,它失败了:
NSubstitute.Exceptions.AmbiguousArgumentsException:无法确定要使用的参数规范。
仅供参考,使用TFS 2015和VS 2015。
答案 0 :(得分:2)
简而言之,整个问题是由一个旧的测试引起的,该测试在没有使用NSubstitute的情况下错误地使用了Arg匹配器。
我在这里学到的教训是,这种情况会产生非常不准确的错误,我会敦促任何遇到此类问题的人查看Arg匹配器的所有用法。
答案 1 :(得分:0)
我在使用带有xunit的NSubstitute时遇到了这个问题,默认情况下并行运行测试类。 NSubstitute必须存在线程问题,因为关闭并行化会为我们修复它。在你的Test项目AssemblyInfo.cs中添加
[assembly: CollectionBehavior(DisableTestParallelization = true)]