Классы, отмеченные TestInitialize и TestCleanup, не выполняются

Я боролся с этим, надеюсь, это поможет кому-то еще.

Создавая модульные тесты с помощью MsTest, я обнаружил, что повторяю один и тот же код в каждом тесте, и нашел пару удобных атрибутов (TestInitialize, TestCleanup, ClassInitialize и ClassCleanup).

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

Вот пример кода, который я использовал:

[TestInitialize()]
private void Setup()
{
    _factory = new Factory();
    _factory.Start();
}

Так почему же это не выполняется?


person Stefan de Kok    schedule 20.09.2012    source источник


Ответы (3)


Хитрость заключается в том, чтобы сделать эти методы public:

[TestInitialize()]
public void Setup()
{
    _factory = new Factory();
    _factory.Start();
}

Когда они private, они не выполняются.

person Stefan de Kok    schedule 20.09.2012
comment
@Stefan de Kok: Невероятно, что я проглядел это. Спасибо за подсказку! - person christoph; 19.08.2014
comment
@stuartdotnet - Ты потрясающий человек!!! Я сходил с ума, пока не прочитал твой ответ!!! - person callyaser; 04.12.2018

TestInitialize и TestCleanup запускаются до и после всех тестов, а не до и после каждого из них.

Это неправильно, см., например, эту ссылку: http://social.msdn.microsoft.com/Forums/en-US/vststest/thread/85fb6549-cbaa-4dbf-bc3c-ddf1e4651bcf

См. также MSDN

http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.classinitializeattribute.aspx

В примере кода показано, как использовать TestInitialize, ClassInitialize и AssemblyInitialize.

person Stefan de Kok    schedule 21.05.2013

У меня также была проблема, и из-за моего непонимания того, как вызываются методы, я решил ее следующим образом: сделайте так, чтобы ваши тесты наследуются от класса, содержащего методы TestInitialize и TestCleanup.

person seawave_23    schedule 25.12.2016