Ответ 1
Трюк заключается в том, чтобы сделать эти методы public
:
[TestInitialize()]
public void Setup()
{
_factory = new Factory();
_factory.Start();
}
Если они private
, они не выполняются.
Я боролся с этим, надеюсь, это поможет кому-то другому.
Во время создания модульных тестов с использованием MsTest я обнаружил, что повторял один и тот же код в каждом тесте и нашел несколько удобных атрибутов (TestInitialize
, TestCleanup
, ClassInitialize
и ClassCleanup
).
Предположительно, когда вы отмечаете метод с одним из этих атрибутов, он должен выполняться автоматически (перед каждым тестом, после каждого теста, перед всеми тестами и после всех тестов соответственно). Разочарочно, этого не произошло, и мои тесты не удались. Если напрямую вызвать эти методы из классов, помеченных атрибутом TestMethod
, тесты прошли успешно. Было очевидно, что они не выполнялись сами.
Вот пример кода, который я использовал:
[TestInitialize()]
private void Setup()
{
_factory = new Factory();
_factory.Start();
}
Итак, почему это не выполняется?
Трюк заключается в том, чтобы сделать эти методы public
:
[TestInitialize()]
public void Setup()
{
_factory = new Factory();
_factory.Start();
}
Если они private
, они не выполняются.
TestInitialize и TestCleanup запускаются до и после всех тестов, но не до и после каждого.
Это неправильно, см., например, эту ссылку: http://social.msdn.microsoft.com/Forums/en-US/vststest/thread/85fb6549-cbaa-4dbf-bc3c-ddf1e4651bcf
См. также MSDN
В примере кода показано, как использовать TestInitialize, ClassInitialize и AssemblyInitialize.
У меня также была проблема и - из-за моего непонимания о том, как вызовы методов вызваны - решил это с помощью этого: Сделайте ваши тесты наследуемыми от класса, содержащего методы TestInitialize и TestCleanup.