【发布时间】:2023-03-28 23:40:01
【问题描述】:
我最近开始使用 NUnit 为我的项目进行集成测试。这是一个很棒的工具,但我发现了一个我似乎无法找到答案的缺点。我所有的集成测试都使用 TestCaseSource 属性并为每个测试指定一个测试用例源名称。现在的问题是准备这些测试用例源需要相当长的时间(约 1 分钟),如果我正在运行单个测试,NUnit 总是会加载每个测试用例源,即使它不是测试的测试用例源我正在运行。
是否可以更改此行为,以便仅加载我正在运行的测试的测试用例源?我想避免每次创建新测试时都创建新程序集(似乎相当多余和繁琐,更不用说,难以维护),因为我读过不同程序集中的测试是单独加载的,但我没有不知道测试用例的来源。值得一提的是,我使用 Resharper 作为测试运行器。
TL;DR:需要告诉 NUnit 只加载当前会话中运行的测试所需的 TestCaseSource。当前的行为是为运行的任何测试加载所有 TestCaseSource。
【问题讨论】:
-
你能提供一些代码来演示当前的行为吗?
-
当然,我会尽快编辑原始问题并添加我正在使用的代码。
-
这演示了我的行为 - 在 VS2013 上运行 ReSharper 6。为格式道歉-我不想将其发布为非答案答案。即使我没有运行
TestWhichIAmNotRunning,ReSharper 也会评估InfiniteValues,这将永远返回1(几乎)。 - - - - -public static IEnumerable<int> InfiniteValues { get { while ( DateTime.Now != DateTime.MinValue ) yield return 1; } } [Test, TestCaseSource("InfiniteValues")] public void TestWhichIAmNotRunning(int value) { } -
我已经联系了 JetBrains 并链接到了这个问题 - 如果他们回复我,我会在这里发布一些内容。
标签: c# unit-testing nunit resharper integration-testing