如何从 vstest 记录器获取测试 ID?

How to get test id from vstest logger?

我正在寻找 vstest.console.exe 运行 的测试 ID。我通过从程序集 Microsoft.VisualStudio.TestPlatform.ObjectModel 实现 ITestLogger 接口创建了自定义记录器,并创建了三个处理程序。

[ExtensionUri("logger://SimpleLogger")]
    [FriendlyName("SimpleLogger")]
    public class SimpleConsoleLogger : ITestLogger
    {
        public void Initialize(TestLoggerEvents events, string testRunDirectory)
        {
            events.TestRunMessage += TestMessageHandler;

            events.TestResult += TestResultHandler;

            events.TestRunComplete += TestRunCompleteHandler;
        }

        private void TestMessageHandler(object sender, TestRunMessageEventArgs e)
        {

        }

        private void TestResultHandler(object sender, TestResultEventArgs e)
        {

        }

        private void TestRunCompleteHandler(object sender, TestRunCompleteEventArgs e)
        {

        }
    }

但是这些事件参数中没有一个包含测试 ID。所以我很困惑,因为当我 运行 使用 /Logger:trx 属性进行测试时,我可以在 .trx 文件中看到测试 ID。如何使用我的自定义记录器获取它?

TestResultEventArgs class 有一个 属性 名为 Result, which is of type TestResult, that in turn has a property named TestCase of the same type. That type carries all the information about the test (e.g. the IdDisplayNameSource、...)。

总结:

    private void TestResultHandler(object sender, TestResultEventArgs e)
    {
        Console.WriteLine(e.Result.TestCase.Id);
    }