Ответ 1
Вы правы в том, что нет публичного API для фреймворка mstest. В один прекрасный день я написал ручную замену mstest, чтобы понять, как это было тяжело, и это не так просто, как кажется (особенно если вы хотите использовать преимущества более чем одного ядра процессора), поэтому остерегайтесь идти по этому пути.
Лично я всегда просто программировал mstest.exe
, а затем разбирал полученный XML файл .trx
. Существуют ли какие-либо конкретные причины, по которым вы не можете использовать Process.Start
для его запуска?
P.S. Некоторое странное поведение mstest.exe решается, если вы передаете параметр командной строки /noisolation
- дайте ему перейти, если вы так наклонены: -)
Обновление: Эрик упоминает, что хочет запустить тестовый API в текущем потоке, чтобы он мог установить культуру потока для проблем глобализации.
Если вы запустите unit test под отладчиком, вы заметите, что mstest создает кучу потоков и запускает все ваши тесты в разных потоках, поэтому это вряд ли работает, даже если вы можете получить доступ к API.
Я предлагаю сделать следующее:
- Из вашего тестового приложения "runner" установите переменную среды
- Запустите mestest, указав его на конкретные тесты.
- Добавьте метод
[ClassInitialize]
(или[TestInitialize]
), который читает эту переменную среды и устанавливает культуру - Profit!