Как заставить MSTest.exe возвращать 0, даже если тест не прошел?

У нас есть сборка, которая работает в TeamCity и содержит несколько разных тестовых проектов. Каждый из них запускается один за другим, и мы используем MSTest.exe из Rakefile, чтобы все организовать, таким образом:

desc 'Run Unit Tests'
mstest :data_test => [:build_database_tests] do |mstest|
  puts build_header("Data Tests")
  mstest.command = msTestCommand
  mstest.parameters = [
    "/resultsfile:dTest.trx", 
    "/detail:errormessage", 
    "/detail:description",
    "/usestderr"
  ]
  mstest.assemblies  "../../../Database/DataTests/bin/Release/DataTests.dll"
end

Это создает хороший файл TRX, который TeamCity может анализировать, и все остальное, что создает хорошую чистую вкладку отчета. Однако MSTest.exe возвращает 1, если тест не прошел, что rake интерпретирует как сбой и приводит к тому, что остальные тесты не запускаются.

Мы хотели бы подавить такое поведение; мы хотим, чтобы сборка продолжалась после сбоя теста, чтобы мы могли видеть, какие другие тесты также могут завершиться ошибкой. Как мы можем заставить Rake игнорировать код возврата и / или заставить MSTest.exe не выдавать неверный код возврата в случае неудачного теста?


person GWLlosa    schedule 15.01.2016    source источник
comment
Вы хотите сказать, что если 1 тест в этом наборе (data_test) завершится неудачно, он остановит выполнение теста, определенного этой задачей? Я не думал, что mstest работает так. Или вы говорите, что если data_test не удается, то еще одна тестовая задача не запускается?   -  person Anthony Mastrean    schedule 19.01.2016
comment
Последний. После data_test я могу запустить sql_test, и mstest, возвращающий ненулевое значение, прерывает rakefile.   -  person GWLlosa    schedule 19.01.2016


Ответы (1)


MSTest сам по себе выполнит ВСЕ наборы тестов, даже если предыдущий не удался. Ваша проблема связана с интерпретацией, которую делает Рейк. Большинство языков сборки (если не все) (ANT, MSBuild, Gradle и т. Д.) Имеют подобное поведение «Продолжать при ошибке».

Выполнив быстрый поиск в Google по запросу "продолжать грабли при ошибке", я нашел пару ссылок:

http://www.rake.build/fascicles/004-ignore-failed-tasks.html Продолжить грабли после сбоя

Основная суть, которую я понял, заключалась в том, что вы можете использовать sh для итерации по серии задач и игнорировать сбои, чтобы выполнялись ВСЕ задачи.

person spencerwjensen    schedule 20.01.2016