并非我的所有 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 测试方法都在测试资源管理器中可见的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin Android Nunit测试在测试资源管理器中可被发现,但在运行测试时未被发现。 (VS2017)

Resharper 将我的 NUnit 测试标记为未使用

如何迭代地运行 nunit 测试

Nunit - 没有发现测试 [没有错误消息]

单元测试之NUnit二

C# - 单元测试 - 初始化私有字段 - ASP.NET Core 5 - NUnit 测试