Почему декорированный метод ClassInitialize делает все мои тесты неудачными?

Я понимаю, из MSDN, что ClassInitialize должен пометить метод, который будет выполнять настройку кода для всех тестов, один раз, до того, как все тесты будут запущены. Когда я включаю такой метод в сокращенное приспособление ниже, все тесты не пройдены. Как только я это прокомментирую, они снова пройдут.

[TestClass]
public class AuthenticationTests
{
    [ClassInitialize]
    public void SetupAuth()
    {
        var x = 0;
    }

    [TestMethod]
    public void TestRegisterMemberInit()
    {
        Assert.IsTrue(true);
    }
}

3 ответа

Решение

[ClassInitialize] оформленный метод должен быть статическим и принимать ровно один параметр типа TestContext:

[ClassInitialize]
public static void SetupAuth(TestContext context)
{
    var x = 0;
}

На самом деле, если я копирую и вставляю ваш код в чистый проект VS, тестирующий объясняет именно это в сообщении об ошибке:

Метод UnitTestProject1.AuthenticationTests.SetupAuth имеет неверную подпись. Метод должен быть статическим, общедоступным, не возвращать значение и должен принимать один параметр типа TestContext.

Метод отмечен [ClassInitialize]:

  1. Применять только к одному методу тестового класса.
  2. Класс должен быть запечатан, то есть не наследоваться.
  3. Метод должен быть публичным статическим.
  4. Метод должен передать TestContext параметр.
  5. Метод не возвращает значение.

В VS2015 отсутствие параметра TestContext приводит к выводу этой самой бесполезной ошибки при запуске теста (в случае, если кто-то ищет исключение, как я):

Возникло исключение: "Microsoft.VisualStudio.TestPlatform.MSTestFramework.TypeInspectionException" в Microsoft.VisualStudio.TestPlatform.Extensions.VSTestIntegration.dll

Другие вопросы по тегам