仅在 TFS 构建中出现 NSubstitute 参数匹配器错误
NSubstitute Argument Matcher Errors only in TFS Build
我遇到一个问题,在我的本地机器上使用 visual studio 测试成功,但是当我的 CI Build 在我的 TFS 服务器上运行它们时它们会失败。
这是失败的行和上下文的前一行。
var mockEventRepository = Substitute.For<IEventRepository>();
mockEventRepository.GetAll().ReturnsForAnyArgs(r => new List<Event>().AsQueryable());
请注意,没有参数匹配项!整个测试一个都没有。
TFS 会报错:
NSubstitute.Exceptions.UnexpectedArgumentMatcherException : Argument matchers (Arg.Is, Arg.Any) should only be used in place of member arguments. Do not use in a Returns() statement or anywhere else outside of a member call.
简而言之,这些错误在发生时似乎是一致的(相同的错误),但它们似乎也会随机发生或不发生。
例如...在原始构建失败后排队后续相同构建后才成功。然而,那一次当它尝试使用不同配置的相同构建时失败了,但出现了不同但相似且错误的错误:
NSubstitute.Exceptions.AmbiguousArgumentsException : Cannot determine argument specifications to use.
仅供参考,使用 TFS 2015 和 VS 2015。
简而言之,整个问题是由一个旧测试引起的,该测试在没有使用 NSubstitute 的情况下错误地包含了 Arg 匹配器。
我在这里学到的教训是,这种情况会产生非常不准确的错误,我会敦促遇到此类问题的任何人检查 Arg 匹配器的所有用途。
我在将 NSubstitute 与默认并行运行测试 类 的 xunit 一起使用时看到了这个问题。 NSubstitute 一定存在线程问题,因为关闭并行化为我们修复了它。在您的测试项目中 AssemblyInfo.cs 添加
[assembly: CollectionBehavior(DisableTestParallelization = true)]
我遇到一个问题,在我的本地机器上使用 visual studio 测试成功,但是当我的 CI Build 在我的 TFS 服务器上运行它们时它们会失败。
这是失败的行和上下文的前一行。
var mockEventRepository = Substitute.For<IEventRepository>();
mockEventRepository.GetAll().ReturnsForAnyArgs(r => new List<Event>().AsQueryable());
请注意,没有参数匹配项!整个测试一个都没有。
TFS 会报错:
NSubstitute.Exceptions.UnexpectedArgumentMatcherException : Argument matchers (Arg.Is, Arg.Any) should only be used in place of member arguments. Do not use in a Returns() statement or anywhere else outside of a member call.
简而言之,这些错误在发生时似乎是一致的(相同的错误),但它们似乎也会随机发生或不发生。
例如...在原始构建失败后排队后续相同构建后才成功。然而,那一次当它尝试使用不同配置的相同构建时失败了,但出现了不同但相似且错误的错误:
NSubstitute.Exceptions.AmbiguousArgumentsException : Cannot determine argument specifications to use.
仅供参考,使用 TFS 2015 和 VS 2015。
简而言之,整个问题是由一个旧测试引起的,该测试在没有使用 NSubstitute 的情况下错误地包含了 Arg 匹配器。
我在这里学到的教训是,这种情况会产生非常不准确的错误,我会敦促遇到此类问题的任何人检查 Arg 匹配器的所有用途。
我在将 NSubstitute 与默认并行运行测试 类 的 xunit 一起使用时看到了这个问题。 NSubstitute 一定存在线程问题,因为关闭并行化为我们修复了它。在您的测试项目中 AssemblyInfo.cs 添加
[assembly: CollectionBehavior(DisableTestParallelization = true)]