MSTest, выполняющий все мои тесты одновременно, повреждает тесты - что сделать

Я понял это. Я должен был использовать request.cookie в python для получения cookie, так как я использую Flask.

24
задан George Mauer 31 March 2009 в 04:54
поделиться

2 ответа

Вы могли бы хотеть попытаться использовать Монитор и войти в TestInitialize и выйти на TestCleanup. Если Ваши тестовые классы, все зависят от внешнего файла, необходимо будет использовать единственный объект блокирования для всех них.

public static class LockClass
{
    public static object LockObject = new object();
}

...

[TestInitialize]
public void TestSetup()
{
     Monitor.Enter(LockClass.LockObject);
}

[TestCleanup]
public void TestCleanup()
{
     Monitor.Exit(LockClass.LockObject);
}

Это должно вынудить все Ваши тесты работать последовательно и пока вся Ваша тестовая передача/сбой, которую они должны выполнить. Если какой-либо из них бросит непредвиденную исключительную ситуацию, тем не менее, все, что остальные подвесят, то так как Код выхода не будет выполнен для теста, который аварийно завершается.

33
ответ дан 28 November 2019 в 23:39
поделиться

У меня была попытка использовать блокировки таким образом.Однако я испытал то, что VS2010 не по умолчанию выполняет тесты параллельно, а выполняет их последовательно, в одном потоке. (Однако можно было бы включить параллельное выполнение. Но это не предотвратило бы проблему полностью)

Что меня очень беспокоит, так это то, что последовательное выполнение будет происходить в произвольном порядке, даже между тестовыми классами!

Так, например, порядок выполнения может выглядеть следующим образом:

  • Класс A - TestInitialize: блокировка будет установлена ​​
  • Класс A - TestMethod1: будет выполняться, OK
  • Класс B - TestInitialize: будет установлена ​​блокировка => Тема будет заблокирована => Полные модульные тесты будут заблокированы! Причина в том, что нет других потоков, которые продолжали бы выполнять методы класса A. Таким образом, Montor.Exit () никогда не будет достигнут.

Я не понимаю, почему М.С. так поступает. Другие фреймворки UnitTest (например, JUnit) выполняют методы тестирования по классам. В противном случае будет некоторое чередование методов SetUp / TearDown, что вызовет описанный хаос ...

Есть ли кто-нибудь, кто знает, как предотвратить скачки MSTest между тестовыми классами? (В настоящее время я использую средство запуска тестов Resharpers, которое ведет себя должным образом, выполняя все методы тестирования одного класса перед переходом к следующему классу)

5
ответ дан 28 November 2019 в 23:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: