MS Test V2 - ClassInitialize поведение при сбое - PullRequest
0 голосов
/ 07 января 2020

Я использую VS2019 с платформой MS Test V2 и тестовым адаптером. Я немного не уверен относительно предполагаемого поведения ClassInitialize.

Когда я запускаю группу тестов из тестового класса:

  • В MS Test V1.3, если ClassInitialize не удалось, все тесты были объявлены неудачными.
  • В MS Test V2 кажется, что только первый тест считается неудачным, все остальные - как пройденные.

Когда я запускаю тесты независимо (по одному за раз) каждый тест сообщается как проваленный. Поэтому я подумал, что это может быть проблемой параллельного выполнения, но даже после отключения параллельного выполнения поведение MS Test v2 остается таким же.

Предполагается ли, что сбой ClassInitialize не завершит все тесты?

1 Ответ

1 голос
/ 07 января 2020

FWIW Я могу воспроизвести это поведение с помощью. NET Core UnitTestProject, используя MSTest 2.0.0.

Вот код тестового класса:

using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;

namespace UnitTestProject2
{
    [TestClass]
    public class UnitTest1
    {
        [ClassInitialize]
        public static void ClassInit(TestContext tc)
        {
            throw new Exception("DIE IN INITIALIZE");
        }

        [TestMethod] public void TestMethod1() { }
        [TestMethod] public void TestMethod2() { }
        [TestMethod] public void TestMethod3() { }
    }
}

И действительно, если вы Посмотрите на результаты в TestExplorer, вы можете увидеть, что только TestMethod1 помечены как Failed, а TestMethod2 и TestMethod3 помечены как Successful.

Тот же результат с консоли.

❯ dotnet test
Test run for C:\source\stuff\UnitTestProject1\UnitTestProject2\bin\Debug\netcoreapp3.1\UnitTestProject2.dll(.NETCoreApp,Version=v3.1)
Microsoft (R) Test Execution Command Line Tool Version 16.3.0
Copyright (c) Microsoft Corporation.  All rights reserved.

Starting test execution, please wait...

A total of 1 test files matched the specified pattern.
  X TestMethod1
  Error Message:
   Class Initialization method UnitTestProject2.UnitTest1.ClassInit threw exception. System.Exception: System.Exception: DIE IN INITIALIZE.
  Stack Trace:
     at UnitTestProject2.UnitTest1.ClassInit(TestContext tc) in C:\source\stuff\UnitTestProject1\UnitTestProject2\UnitTest1.cs:line 12


Test Run Failed.
Total tests: 3
     Passed: 2
     Failed: 1
 Total time: 0,8928 Seconds

Интересно, что если вы добавите несколько Console.WriteLine операторов в методы испытаний, вы увидите, что они действительно выполняются. Таким образом, это не похоже на ошибку только в выходных данных.

Обновление Не уверен, стоит ли ожидать этого, но я представил проблему для этого https://github.com/microsoft/testfx/issues/672 .

...