并非我的所有 NUnit 测试方法都在测试资源管理器中可见
Posted
技术标签:
【中文标题】并非我的所有 NUnit 测试方法都在测试资源管理器中可见【英文标题】:Not all of my NUnit test methods are visible in Test Explorer 【发布时间】:2019-05-03 20:49:32 【问题描述】:我正在使用 NUnit 添加统一测试的自动化,以便测试我公司正在使用的现有家庭开发的 C# 应用程序。如果我使用两个测试,则只有其中一个可见并运行。
我将 Visual Studio 2019 Professional 和 NUnit v3.11.0 与 Nunit3TestAdapter v3.13.0 一起使用。
我创建了两个实现 IEnumerator 的类,以及两个使用我的测试文件中的数据的方法,即上述类中定义的简单 .csv。
// Test 1 - success (ok dates)
public class DonneesTestOK : IEnumerable
public IEnumerator GetEnumerator()
var reader = new StreamReader(File.OpenRead(
@"C:\GIT_Repo\ndm1001\TestSucces.csv"));
while (!reader.EndOfStream)
var line = reader.ReadLine();
var values = line.Split(',');
string psDatesDebut = values[0];
yield return new string[] psDatesDebut ;
// Test 2 - fail (bad dates)
public class DonneesTestPasOK : IEnumerable
public IEnumerator GetEnumerator()
var reader = new StreamReader(File.OpenRead(
@"C:\GIT_Repo\ndm1001\TestEchec.csv"));
while (!reader.EndOfStream)
var line = reader.ReadLine();
var values = line.Split(',');
string psDatesDebut = values[0];
yield return new string[] psDatesDebut ;
我还创建了两种方法来使用各自的数据文件测试主应用程序。
[TestFixture]
public class TestNUnit
// test 1 - succes (ok dates)
[TestCaseSource(typeof(DonneesTestOK))]
public void TestNDM1001OK(string[] psDatesDebut)
int intCodeRetour = 0x00;
int expected = intCodeRetour;
Assert.That(Program.Main(psDatesDebut), Is.EqualTo(expected));
// test 2 - echec (bad dates)
[TestCaseSource(typeof(DonneesTestPasOK))]
public void TestNDM1001PasOK(string[] psDatesDebut)
int expected = 8;
Assert.That(Program.Main(psDatesDebut), Is.EqualTo(expected));
只有 TestNDM1001OK 可见并运行。
主要方法声明如下:
class Program
public static int Main(string[] args)
...
与其他应用程序中的测试一样,代码应测试主应用程序并生成包含正确数据的输出文件。 我使用 .csv 中的一系列日期测试应用程序,然后应用程序生成一些输出文件。
已修复:
好的,这是初学者的错误。 我比较了我的 VS2017 环境(其中两个测试都有效)和 VS2019(其中一个测试无效)。
除了 VS2019 测试资源管理器中的“全部运行”和“运行...”选项外,我还注意到“播放列表”部分,其中选择了名为“PasOK”的播放列表。我想知道为什么会发生这种情况,并记得在星期五,我创建了两个播放列表,但不记得我选择了其中任何一个。在 VS2017 中,没有选择任何内容并且一切正常。因此,我在 VS2019 中将下拉菜单更改为“播放列表”所有测试“,现在它可以正常工作了。
【问题讨论】:
即使您提供了TestCaseSource
,您仍应使用Test
属性标记您的测试。您可以在一行中执行此操作,如下所示:[Test, TestCaseSource(typeof(whatever))]
。
我还建议您检查 DonneesTestPasOK
是否实际返回元素。如果你没有产生任何东西,测试可能会被发现,但不会运行。
没有理由将[Test]
添加到方法中。事实上,有些用户看到它有点困惑,因为它似乎暗示实际上有 n + 1 个测试用例而不是 n。我们只允许额外的[Test]
以实现向后兼容性。以下所有内容都告诉 NUnit 方法是一个测试:Test、TestCase、TestCaseSource。
【参考方案1】:
您是否尝试过安装 MSTest.TestAdapter?我在 vs2017 中遇到了类似的问题
【讨论】:
这是 NUnit,因此 MSTest 适配器不会产生任何影响,只是它需要一些时间来运行并且找不到任何测试。【参考方案2】:如果您没有看到第二种方法的任何测试,那么该方法的源没有返回任何数据。为了找出原因,只需调试它的枚举器即可。
【讨论】:
我刚刚注释掉了数据部分和测试 2 的测试方法,这是唯一有效的方法。不可见的测试 1 现在可见且正在运行。所以,当时看起来只有一个测试可以工作,这很奇怪,因为即使我有 6 或 7 个不同的场景,其他一些测试也能正常工作。然而,结构不同。 我刚刚在 VS2017 中尝试了同一个项目,一切正常。这是VS2019的错误吗?够奇怪的。以上是关于并非我的所有 NUnit 测试方法都在测试资源管理器中可见的主要内容,如果未能解决你的问题,请参考以下文章