2010-02-12 4 views
14

редактировать: нота, вопрос 288805 похож, однако, я специально задаю, как делает MSTest выбрать по умолчанию тестовый заказ. Пожалуйста, ознакомьтесь с остальной частью этого вопроса. Спасибо Эйлону за the link.Как MSTest определяет порядок запуска методов тестирования?

Я смотрел старый проект MSTest. Испытания всегда выполнялись в том же порядке. Порядок не был буквенным и отскакивал между методами в двух файлах * .cs TestMethod.

Я не изменил физический порядок устаревшего кода . Я сделал для своего удобства добавление «MSTest01» к методу имени первого теста «MSTest02» к методу метода второго теста и т. Д.

К моему удивлению, порядок выполнения функций TestMethod изменился; # 3 сначала, # 6 второй, № 5 третий, и так далее.

Когда я снял «MSTestnn» строку из имен функций TestMethod, порядок их выполнений изменен обратно к предыдущему упорядоченности, т.е. один тест из первого файла .cs, два теста из второго .cs файл, пять тестов из первого файла .cs и т. д.

кажется, что местоположение файла не может быть фактором в то время как TestMethod имя функции может быть фактором.

ВОПРОС: может ли кто-нибудь объяснить, как MSTest принимает решение о выполнении функций TestMethod?

+4

Обычно вам не важно, в каком порядке выполняются ваши юнит-тесты. Это, как говорится, интригующий вопрос. – Mathias

+1

@ Mathias Согласен. Мне нравится, как xUnit.net запускает тесты в случайном порядке. Случайный порядок - лучший выбор, потому что он, вероятно, выявит зависимости последовательности, которые не должны существовать. Смотрите мои комментарии к Трою. – gerryLowry

+0

? Странно, мои комментарии к Трое, похоже, исчезли вместе с его вопросом. – gerryLowry

ответ

6

Я считаю, что MSTest выполняет методы тестирования, упорядочивая их по их идентификатору (как представляется, их полное пространство имен).

Я создал TestProject1, который содержит 4 теста (UnitTest1, ... 2, ... A, ... B). Каждый модульный тест содержит 5 тестовых методов (TestMethodA, ... B, ... 1, ... 2, ... 3). Они были объявлены случайным порядком внутри своих тестовых классов. Теперь, каждый раз, когда я бегу MSTest, тесты выполняются с тем же порядком:

TestProject1.UnitTest1.TestMethod1 
TestProject1.UnitTest1.TestMethod2 
TestProject1.UnitTest1.TestMethod3 
TestProject1.UnitTest1.TestMethodA 
TestProject1.UnitTest1.TestMethodB 
TestProject1.UnitTest2.TestMethod1 
TestProject1.UnitTest2.TestMethod2 
TestProject1.UnitTest2.TestMethod3 
TestProject1.UnitTest2.TestMethodA 
TestProject1.UnitTest2.TestMethodB 
TestProject1.UnitTestA.TestMethod1 
TestProject1.UnitTestA.TestMethod2 
TestProject1.UnitTestA.TestMethod3 
TestProject1.UnitTestA.TestMethodA 
TestProject1.UnitTestA.TestMethodB 
TestProject1.UnitTestB.TestMethod1 
TestProject1.UnitTestB.TestMethod2 
TestProject1.UnitTestB.TestMethod3 
TestProject1.UnitTestB.TestMethodA 
TestProject1.UnitTestB.TestMethodB 

Единственный способ изменить этот порядок, чтобы переименовать один TestClass или TestMethod. Если, например, я переименую TestMethodB, UnitTest1, в TestMethod4, он будет выполнен до TestMethodA.

Чтобы увидеть идентификаторы ваших методов тестирования, откройте окно «Test View» из VS, а затем щелкните правой кнопкой мыши заголовок столбца (например, имя теста) -> «Добавить/удалить столбцы ...» и добавьте «ID '.

+3

Это поведение не указано, и оно может меняться без предупреждения. –

+0

Как вы получили MSTest для вывода фактического порядка выполнения? Я пытаюсь сделать то же самое здесь: https://stackoverflow.com/questions/48379363/how-to-output-the-execution-order-of-unit-tests-in-visual-studio-2017 – philreed

2

Что касается порядка выполнения VSTest. Вот как это организовано в вашем TestProject:

  1. Сортировать CS-файлы в вашем проекте по их времени создания ASC
  2. Метод установки в каждом файле

Например, у вас есть 3 с × файлы проект.

  • UnitTest1.cs - создано 01.01.1970 с методами TestMethod05 и TestMethod03
  • UnitTest2.cs - создано 05/01/1970 с помощью метода TestMethod02.
  • UnitTest3.cs - создано 01.03.1970 методом TestMethod01.

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

TestProject1.UnitTest1.TestMethod05 
    TestProject1.UnitTest1.TestMethod03 
    TestProject1.UnitTest3.TestMethod01 
    TestProject1.UnitTest2.TestMethod02 

Вы можете увидеть 'порядок' по умолчанию с помощью команды:

vstest.console.exe TestProject1.dll/ListTests

+0

Есть ли способ изменить этот порядок по умолчанию в vstest, другие, которые пытаются испортить время создания файла (удалить, воссоздать)? – Razkar

+0

Вы можете попробовать использовать плейлист. Щелкните правой кнопкой мыши метод Test в Test Explorer => Добавить в плейлист => Новый плейлист –