使用 TestCaseSource 时无法在 VS2019 测试资源管理器的列表中看到单个测试结果

Can't see individual test results in a list in the VS2019 Test Explorer when using TestCaseSource

我正在进行一种集成测试 - 我正在使用一些 REST API 端点测试 HTTP 200。无论如何,这对我的问题并不重要。

这是我的测试:

using NUnit.Framework;
using NUnit.Framework.Internal;

namespace EndpointTests
{
    [TestFixture]
    public class Tests
    {
        public class EndPoint
        {
            // just a container for URL, bearer token and so on
        }

        private static IEnumerable<EndPoint> EndPoints()
        {
            // this function returns a list of test data objects, about 150 pcs
        }

        [Test]
        [TestCaseSource(typeof(EndpointTests.Tests), nameof(EndPoints))]
        public async Task Should_Respond_Http200OK_When_Requested(EndPoint endPoint)
        {
            Assert.AreEqual( ... );
        }
    }
}

我有一个包含大约 150 个对象的 IEnumerable 列表,这些对象又包含我用来提供测试功能的数据(更准确地说:这是我的 TestCaseSource)。我知道 Visual Studio 是 运行 所有 150 个测试正确,正如预期的那样。问题是我看不到个别结果。

我的问题

是否可以Visual Studio在测试资源管理器的列表中打印每个单独的测试结果?
像这样?

根据您的测试定义,NUnit 将创建一个名为 Should_Respond_Http200OK_When_Requested 的测试套件,其中包含 150 个测试用例。测试用例都将具有相同的名称,在您的附件中不可见,但可能类似于 Should_Respond_Http200OK_When_Requested(<EndPoint>).

NUnit本身150个同名测试用例没有问题。它有其他方法来识别测试。然而,TestExplorer 使用名称来区分测试。它将这种情况视为具有 150 个结果的单个测试。当您突出显示测试时,这些结果应该是可见的,但这不是一个非常方便的显示。

创建测试名称时,NUnit 使用每个参数的字符串表示形式。如果你给你的 EndPoint class 一个 ToString() 覆盖,那么 NUnit 将使用它来显示。如果表示是唯一的,TestExplorer 会将这些识别为不同的测试。