Как MSTest определяет порядок запуска тестовых методов?

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

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

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

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

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

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

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

Ответы

Ответ 1

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

Я создал TestProject1, который содержит 4 теста (UnitTest1,... 2,... A,... B). Каждый unit test содержит 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

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

  • Сортировка cs файлов в вашем проекте по времени CREATION ASC
  • Позиция метода в каждом файле

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

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

Тогда порядок выполнения теста таков:

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

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

vstest.console.exe TestProject1.dll/ListTests