2016-04-12 2 views
1

Я понимаю, что идеальные модульные тесты не должны разделять какой-либо контекст между ними, но у меня есть дилемма: я пытаюсь выполнить единичный тест против части программного обеспечения, которая имеет только одну лицензию, которая может быть экземпляр за один раз.Общий контекст между .NET Unit test Классы

.NET Устройства, похоже, работают параллельно, поэтому, когда я нажимаю «Запускать все тесты», все классы запускаются одновременно, и большинство из них терпят неудачу, потому что у всех не может быть лицензии.

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

  • Как разделить контекст между C# модульного тестирования классов?
  • OR Как отключить .NET модульные тесты до NOT работать параллельно?

Разъяснение:лицензионная программа не то, что я пытаюсь проверить, это просто инструмент, мне нужно сделать тест

+1

Вы имеете в виду заставить их * не * работать параллельно? –

+1

Можете ли вы издеваться или вводить своего поставщика лицензий, чтобы он не мешал вашим модульным тестам? –

+4

Похоже, вы создали тесты интеграции вместо UT. Почему вы не используете насмешливую структуру для изоляции? –

ответ

1

Обычно я считал бы Singleton антишаблоном так это делает модульное тестирование невозможным. Но это хороший вариант использования, чтобы иметь Singleton. Реальный синглтон, с частным конструктором и статическим конструктором, будет запускаться только один раз и будет потокобезопасным.

Таким образом, вы можете проводить тесты параллельно.

+0

Да. Благодарю. Я колебался, но я думаю, что это тоже путь. – Raychaser

0

Я не уверен, что это то, что вы можете искать, но будет ли это работать, если вы будете запускать все тесты одновременно, но каждый из них работает на отдельном AppDomain?

Для справки я использовал перекрестные делегат домена, где вы могли бы пройти ваш фактический тест: https://msdn.microsoft.com/en-us/library/system.appdomain.docallback(v=vs.110).aspx

Позволь мне знать, если это работает!

Смежные вопросы