Насколько я помню, в классике модульного тестирования принято, что порядок выполнения модульных тестов не определен - то есть, модульные тесты не могут зависеть от результатов выполнения других модульных тестов. Но разработчики mstest пошли еще дальше: среда исполнения многопоточна и запускает на выполнение несколько модульных тестов одновременно.
Это означает, что нужно быть очень осторожным, если в коде ваших тестов используются статические объекты, такие как "Одиночки" (Singleton) или фабрики классов, поведение которых зависит от внешних условий, задаваемых индивидуально в каждом тесте. Например, это может быть фабрика классов внутри тестируемой системы, которая создает реальный объект или "дублера для тестирования" (Test Double, он же в просторечии mock object
) в зависимости от заданного модульным тестом режима. Проще всего даже будет отказаться от подобных сценариев и решать задачу внедрения зависимостей другими способами, например через конструктор или специальное свойство.
А родробнее про исследование порядка выполнения модульных тестов можно прочитать у Naysawn Naderi: That Pesky MSTest Execution Ordering..