2010-02-12 9 views
14

edit: uwaga, pytanie 288805 jest podobna, ale ja pytam konkretnie w jaki sposób wybrać MSTest domyślny testowego zamówienia. Zobacz resztę tego pytania. Dziękuję Eilon za the link.W jaki sposób MSTest określa kolejność uruchamiania metod testowych?

Przyglądałem się starszemu projektowi MSTest. Testy zawsze trwały w tej samej kolejności. Porządek nie był alfabetyczny i podskakiwał między metodami w dwóch plikach * .cs TestMethod.

Nie zmieniłem fizycznej kolejności dotychczasowego kodu . Zrobiłem dla mojej wygody dołączenie "MSTest01" do nazwy metody pierwszego testu, "MSTest02" do nazwy metody drugiego testu, et cetera, .

Ku mojemu zdziwieniu zmieniła się kolejność wykonywania funkcji TestMethod ; # 3 pierwszy, # 6 sekunda, # 5 trzeci, et cetera.

Kiedy usunięte „MSTestnn” ciągi z nazwy funkcji TestMethod z , ich kolejność wykonywania zmienił z powrotem do poprzedniego zamawiającego, czyli jeden test z pierwszego pliku .cs, dwa testy z drugi .CS plik, pięć testów z pierwszego pliku .cs, , i tak dalej.

Wydaje się, że lokalizacja pliku nie może być czynnikiem podczas TestMethod nazwy funkcji może być czynnikiem.

PYTANIE: czy ktoś może wyjaśnić, w jaki sposób MSTest decyduje o kolejności wykonywania funkcji TestMethod?

+4

Zazwyczaj nie należy przejmować się kolejnością przeprowadzania testów jednostkowych. Biorąc to pod uwagę, jest to intrygujące pytanie. – Mathias

+1

@ Mathias Zgadzam się. Podoba mi się sposób, w jaki xUnit.net uruchamia testy w losowej kolejności. Losowa kolejność jest najlepszym wyborem, ponieważ może ujawnić zależności sekwencyjne, które nie powinny istnieć. Zobacz moje komentarze do Troya. – gerryLowry

+0

? dziwne, moje komentarze do Troja wydają się zniknąć wraz z jego pytaniem. – gerryLowry

Odpowiedz

6

Wierzę, że MSTest wykonuje metody testowe zamawiając je przez ich "ID" (wydaje się, że jest to ich pełny obszar nazw).

Stworzyłem TestProject1, który zawiera 4 untests (UnitTest1, ... 2, ... A, ... B). Każdy test jednostkowy zawiera 5 metod testowych (TestMethodA, ... B, ... 1, ... 2, ... 3). Zostały one zadeklarowane z przypadkową kolejnością w swoich klasach testowych. Teraz, za każdym razem uruchomić MSTest, badania wykonywane są z tej samej kolejności:

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 

Jedynym sposobem na zmianę tego postanowienia jest, aby zmienić nazwę jednego lub TestClass TestMethod. Jeśli na przykład zmieniam nazwę TestMethodB, UnitTest1, na TestMethod4, zostanie ona wykonana przed TestMethodA.

Aby zobaczyć identyfikatory swoich metod testowych, otwórz okno "Widok testu" z VS, a następnie kliknij prawym przyciskiem myszy nagłówek kolumny (np. Nazwa testu) -> "Dodaj/Usuń kolumny ..." i dodaj "ID "kolumna.

+3

To zachowanie nie zostało określone i może ulec zmianie bez powiadomienia. –

+0

W jaki sposób zmusiłeś MSTest do wyprowadzenia faktycznej kolejności wykonania? Próbuję osiągnąć to samo tutaj: https://stackoverflow.com/questions/48379363/how-to-output-the-execution-of-unit-tests-in-visual-studio-2017 – philreed

2

chodzi o VSTest celu wykonania. Oto jak to jest zorganizowane w TestProject:

  1. Uporządkuj cs-plików w projekcie według ich ASC czas utworzenia
  2. Method Pozycja w każdym pliku

Na przykład, masz 3 pliki CS w projekt.

  • UnitTest1.cs - utworzone 01.01.1970 z metodami TestMethod05 i TestMethod03
  • UnitTest2.cs - utworzone 01.05.1970 z metodą TestMethod02.
  • UnitTest3.cs - utworzono 03/01/1970 za pomocą metody TestMethod01.

Wtedy kolejność wykonywania testu jest taka:

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

Można zobaczyć domyślny porządek '' poleceniem:

vstest.console.exe TestProject1.dll/ListTests

+0

Czy istnieje sposób na zmianę tej domyślnej kolejności w vstest, inne, które próbują zepsuć czas utworzenia pliku (usunąć, ponownie utworzyć)? – Razkar

+0

Możesz spróbować użyć listy odtwarzania. Kliknij prawym przyciskiem myszy metodę testu w Eksploratorze testów => Dodaj do listy odtwarzania => Nowa lista odtwarzania –

Powiązane problemy