Domyślnie testy nunit są uruchamiane alfabetycznie. Czy ktoś zna jakiś sposób na ustawienie zlecenia wykonania? Czy istnieje dla tego atrybut?
.net
attributes
tdd
nunit
Riain McAtamney
źródło
źródło
Odpowiedzi:
Twoje testy jednostkowe powinny być w stanie działać niezależnie i samodzielnie. Jeśli spełniają to kryterium, kolejność nie ma znaczenia.
Są jednak sytuacje, w których będziesz chciał najpierw przeprowadzić pewne testy. Typowym przykładem jest sytuacja ciągłej integracji, w której niektóre testy działają dłużej niż inne. Używamy atrybutu category, abyśmy mogli uruchamiać testy wykorzystujące mockowanie przed testami korzystającymi z bazy danych.
tj. umieść to na początku swoich szybkich testów
Jeśli masz testy, które są zależne od pewnych warunków środowiskowych, rozważ atrybuty TestFixtureSetUp i TestFixtureTearDown , które pozwalają oznaczyć metody do wykonania przed i po testach.
źródło
Chcę tylko zaznaczyć, że chociaż większość respondentów zakładała, że są to testy jednostkowe, w pytaniu nie określono, że tak.
nUnit to świetne narzędzie, którego można używać w różnych sytuacjach testowych. Widzę odpowiednie powody, dla których chcę kontrolować zlecenie testowe.
W takich sytuacjach musiałem uciec się do włączenia kolejności uruchamiania do nazwy testu. Byłoby wspaniale móc określić kolejność uruchamiania za pomocą atrybutu.
źródło
001_first_test
002_second_test
i tak dalej?Dodano NUnit 3.2.0
OrderAttribute
, patrz:https://github.com/nunit/docs/wiki/Order-Attribute
Przykład:
źródło
Chęć uruchomienia testów w określonej kolejności nie oznacza, że testy są od siebie zależne - w tej chwili pracuję nad projektem TDD, a będąc dobrym TDDer, wyszydziłem / zakopałem wszystko, ale to sprawi, że byłoby bardziej czytelne, gdybym mógł określić kolejność, w jakiej wyświetlane są wyniki testów - tematycznie zamiast alfabetycznie. Jak dotąd jedyne, o czym przychodzi mi do głowy, to dołączanie a_ b_ c_ do klas do klas, przestrzeni nazw i metod. (Niezbyt przyjemne) Myślę, że atrybut [TestOrderAttribute] byłby fajny - nie jest ściśle powiązany z ramą, ale podpowiedź, abyśmy mogli to osiągnąć
źródło
Niezależnie od tego, czy testy są zależne od kolejności, niektórzy z nas chcą po prostu kontrolować wszystko w uporządkowany sposób.
Testy jednostkowe są zwykle tworzone w kolejności złożoności. Dlaczego więc nie miałyby być również uruchamiane według stopnia złożoności lub kolejności, w jakiej zostały utworzone?
Osobiście lubię widzieć testy uruchamiane w kolejności, w jakiej je utworzyłem. W TDD każdy kolejny test będzie naturalnie bardziej złożony i jego wykonanie zajmie więcej czasu. Wolałbym, aby prostszy test zakończył się niepowodzeniem jako pierwszy, ponieważ będzie to lepszy wskaźnik co do przyczyny niepowodzenia.
Ale widzę również korzyści płynące z uruchamiania ich w losowej kolejności, zwłaszcza jeśli chcesz sprawdzić, czy Twoje testy nie mają żadnych zależności od innych testów. Co powiesz na dodanie opcji testowania biegaczy do „Uruchom testy losowo do zatrzymania”?
źródło
Testuję z Selenium na dość złożonej witrynie internetowej, a cały zestaw testów może trwać dłużej niż pół godziny, a nie jestem jeszcze bliski pokrycia całej aplikacji. Jeśli muszę upewnić się, że wszystkie poprzednie formularze są poprawnie wypełnione dla każdego testu, dodaje to dużo czasu, a nie tylko niewielką ilość czasu do całego testu. Jeśli przeprowadzenie testów jest zbyt duże, ludzie nie będą ich uruchamiać tak często, jak powinni.
Więc uporządkowałem je i zależę od poprzednich testów, aby mieć pola tekstowe i takie wypełnione. Używam Assert.Ignore (), gdy warunki wstępne są nieprawidłowe, ale muszę je uruchomić w porządku.
źródło
Bardzo podoba mi się poprzednia odpowiedź.
Zmieniłem to trochę, aby móc użyć atrybutu do ustawienia zakresu zamówienia:
źródło
OrderedTest
nie jest już obsługiwany w NUnit 3.Wiem, że to stosunkowo stary post, ale oto inny sposób na utrzymanie porządku w teście BEZ utrudniania nazw testów. Używając atrybutu TestCaseSource i przekazując obiektowi delegata (Action), możesz całkowicie nie tylko kontrolować kolejność, ale także nazwać test, czym to jest.
Działa to, ponieważ zgodnie z dokumentacją elementy w kolekcji zwrócone ze źródła testowego będą zawsze wykonywane w kolejności, w jakiej są wymienione.
Oto demo z prezentacji, którą wygłoszę jutro:
źródło
TestCaseSource
jako sposobu na przeprowadzanie zleconych testów to genialny pomysł. Dobra robota. Zastosowałem to podejście wraz z poniższym i dodałem kilka dodatkowych modyfikacji, aby ułatwić korzystanie z niego. Zobacz linki w mojej odpowiedzi, aby uzyskać dodatkowe informacje, ale podstawowa idea pochodzi z tej wspaniałej odpowiedzi!TestCaseSource
musi być statyczne, co wyklucza użycie wzorca. Porażka.TestCaseSource
musi być statycznym obiektem w NUnit 3, inaczej testy nie zostaną wykonane. Nie możesz tworzyć dynamicznych obiektów w statycznym obiekcie. Dlatego nie zadziała w w. 3.Pracuję z kompletnymi przypadkami testowymi UI Selenium WebDriver napisanymi w C #, które są uruchamiane przy użyciu frameworka NUnit. (Nie dotyczy przypadków jednostkowych jako takich)
Te testy interfejsu użytkownika z pewnością zależą od kolejności wykonywania, ponieważ inne testy muszą dodać pewne dane jako warunek wstępny. (Nie jest możliwe wykonanie tych czynności w każdym teście)
Teraz, po dodaniu dziesiątego przypadku testowego, widzę, że NUnit chce działać w tej kolejności: Test_1 Test_10 Test_2 Test_3 ..
Wydaje mi się, że muszę na razie za bardzo ułożyć alfabetycznie nazwy przypadków testowych, ale dobrze byłoby mieć tę małą funkcję kontroli kolejności wykonywania dodaną do NUnit.
źródło
Zwykle Test jednostkowy powinien być niezależny, ale jeśli musisz, możesz nazwać swoje metody w kolejności alfabetycznej, np .:
lub możesz to zrobić ...
źródło
a_
b_
t1_
,t2_
zamiast tego lub polegasz na łatwych do przeoczenia postaciach końcowychIstnieją bardzo dobre powody, aby korzystać z mechanizmu zamawiania testów. Większość moich własnych testów wykorzystuje dobre praktyki, takie jak konfiguracja / porzucenie. Inne wymagają konfiguracji ogromnych ilości danych, które można następnie wykorzystać do przetestowania szeregu funkcji. Do tej pory używałem dużych testów do obsługi tych testów integracji (Selenium Webdriver). Myślę jednak, że powyższy sugerowany post na https://github.com/nunit/docs/wiki/Order-Attribute ma wiele zalet. Oto przykład, dlaczego zamówienie byłoby niezwykle cenne:
Ten 10-minutowy czas oczekiwania spowalnia zestaw testów. Mnożenie podobnych opóźnień w pamięci podręcznej w wielu testach zajmuje dużo czasu. Zamawianie testów może pozwolić na konfigurację danych jako „test” na początku zestawu testów, przy czym testy polegające na pamięci podręcznej są wykonywane pod koniec przebiegu testu.
źródło
To pytanie jest teraz naprawdę stare, ale dla osób, które mogą dotrzeć do tego z wyszukiwania, wziąłem doskonałe odpowiedzi od user3275462 i PvtVandals / Rico i dodałem je do repozytorium GitHub wraz z niektórymi własnymi aktualizacjami. Utworzyłem również powiązany wpis na blogu z dodatkowymi informacjami, na które możesz spojrzeć, aby uzyskać więcej informacji.
Mam nadzieję, że jest to pomocne dla wszystkich. Ponadto często lubię używać atrybutu Category, aby odróżnić moje testy integracyjne lub inne testy kompleksowe od rzeczywistych testów jednostkowych. Inni zwrócili uwagę, że testy jednostkowe nie powinny mieć zależności od kolejności, ale inne typy testów często mają, więc zapewnia to dobry sposób na uruchamianie tylko wybranej kategorii testów, a także zamawianie tych testów od końca do końca.
źródło
Jestem zaskoczony, że społeczność NUnit niczego nie wymyśliła, więc sam postanowiłem stworzyć coś takiego.
Obecnie rozwijam bibliotekę open source która umożliwia zamawianie testów w NUnit. Można zamawiać oprawy testowe i zamawiać „zamówione specyfikacje testów”.
Biblioteka oferuje następujące funkcje:
Biblioteka jest właściwie zainspirowana sposobem, w jaki MSTest testuje porządkowanie
.orderedtest
plików. Spójrz na poniższy przykład.źródło
Jeśli używasz
[TestCase]
, argumentTestName
zawiera nazwę testu.Jeśli nie zostanie określony, nazwa jest generowana na podstawie nazwy metody i podanych argumentów.
Możesz kontrolować kolejność wykonywania testów, jak podano poniżej:
Tutaj użyłem
"ExpressionTest"
przyrostka nazwy metody z liczbą.Możesz użyć dowolnych nazw uporządkowanych alfabetycznie, zobacz TestCase Attribute
źródło
Nie należy polegać na kolejności, w jakiej środowisko testów wybiera testy do wykonania.Testy powinny być izolowane i niezależne. Nie powinni polegać na jakimś innym teście przygotowującym dla nich scenę lub sprzątającym po nich. Powinny też dawać ten sam wynik niezależnie od kolejności wykonywania testów (dla danej migawki SUT)
Trochę googlowałem. Jak zwykle, niektórzy ludzie uciekają się do podstępnych sztuczek (zamiast rozwiązywać podstawowy problem z testowalnością / projektem
Zobacz także: cechy dobrego testu
źródło
W przypadku użycia
TestCaseSource
klucza tooverride string ToString
metoda, jak to działa:Załóżmy, że masz klasę TestCase
I lista przypadków testowych:
Teraz użyjmy go z metodą testową i zobaczmy, co się stanie:
To nie będzie testowane w kolejności, a wynik będzie taki:
Więc jeśli dodaliśmy
override string ToString
do naszej klasy:Wynik ulegnie zmianie i otrzymamy kolejność i nazwę testu:
Uwaga:
źródło