2008-09-26 19 views
27

Czy istnieje coś takiego jak generowanie testu jednostkowego? Jeśli tak ...Automatyczne generowanie testów jednostki .NET

... czy to działa dobrze?

... Jakie są rozwiązania automatycznej generacji, które są dostępne dla .NET?

... czy istnieją przykłady zastosowania takiej technologii?

... czy to jest dobre tylko w przypadku niektórych rodzajów aplikacji, czy może zastąpić wszystkie ręcznie pisane testy jednostkowe?

Odpowiedz

25

Spójrz na Pex. Jest to projekt Microsoft Research. Ze strony internetowej:

Pex generuje testy jednostkowe z ręcznie pisanych testów jednostek sparametryzowanych za pomocą zautomatyzowanych testów eksploracyjnych opartych na dynamicznym wykonywaniu symboli.

14

Uważam, że nie ma sensu generowanie testów jednostkowych, jeśli chodzi o TDD.

Wykonuje się tylko testy jednostkowe, aby upewnić się, że (jako programista) jesteś na dobrej drodze w odniesieniu do projektu i specyfikacji. Po rozpoczęciu generowania testów automatycznie traci to cel. Pewnie to prawdopodobnie oznaczałoby 100% pokrycia kodu, ale to pokrycie byłoby bezsensowne i puste.

Zautomatyzowane testy jednostkowe oznaczają również, że twoja strategia jest test-after, co jest przeciwieństwem testu TDD przed założeniem. Znowu TDD nie dotyczy testów.

Sądzę, że MSTest ma automatyczne narzędzie do generowania testów jednostkowych - mogłem go użyć z VS2005.

+12

Super stary komentarz, ale nikt nie odpowiedział i czułem, że warto powiedzieć: Całkowicie się zgadzam, ale wielu ludzi nie ma w TDD. Chcemy szybkiego skoku na testy kodu już napisanego z różnych powodów. W moim przypadku mam bazę kodu, która nie ma testów. Chcę dodać testy, zanim dodaję więcej funkcji i po prostu chcę mieć dobry start.Istnieją więc powody, aby to zrobić, ale rozpoczęcie projektu od zera i ukończenie go, a WTEDY wprowadzenie testów jednostkowych to okropny pomysł, masz rację. – vbullinger

+3

@vbullinger jest to szczególnie ważne w przypadku programistów, którzy dziedziczą starsze aplikacje. Tak, one (po prostu) mogą działać, ale przydałoby się narysować linię pod kodem z zestawem testów, a następnie przesuwając do przodu, wprowadzone poprawki można dodać do testów już wygenerowanych. –

+1

"Czy Pex całkowicie zastępuje ręczne testy jednostkowe? Krótka odpowiedź brzmi" Nie. " http://buff.ly/1oy1vyn – lifebalance

1

Użyłem NStub do wyodrębnienia testu dla moich zajęć. Działa całkiem dobrze.

+0

Ostatnia aktualizacja w 2007 roku. Nie można załadować mojego zestawu .net 4. – Alex

+0

Istnieje nowe repo na GitHub @ https://github.com/Jedzia/NStub, które mogą być bardziej przydatne ... lub nie. –

1

Zgadzam się z Jonem. Niektóre typy testów, takie jak zautomatyzowane testy fuzz, zdecydowanie korzystają z automatycznego generowania. Mimo że można to wykorzystać w jednostkach testowych, nie osiąga się celów związanych z dobrym pokryciem testów jednostkowych.

0

Użyłem narzędzi do generowania przypadków testowych. Myślę, że sprawdza się to w przypadku testów na wyższym poziomie i ukierunkowanych na użytkownika końcowego. Rzeczy stanowiące część testów akceptacyjnych użytkownika, bardziej niż czyste testy jednostkowe.

Używam narzędzi testowych do testów akceptacyjnych. To dobrze działa.

Zobacz Tooling to Build Test Cases.

0

Istnieje komercyjny produkt o nazwie AgitarOne (www.agitar.com), który automatycznie generuje klasy testowe JUnit.
Nie użyłem go, więc nie mogę wypowiedzieć się na temat jego przydatności, ale gdybym robił projekt Java w tej chwili, bym na niego patrzył.

Nie znam odpowiednika w sieci .net (Agitar ogłosił wersję .net, ale AFAIK nigdy się nie zmaterializował).

-1

Selenium generuje testy jednostkowe z poleceń użytkownika na stronie internetowej, całkiem sprytne.

+2

Selen generuje testy funkcjonalne, a nie testy jednostkowe. Testy funkcjonalne uzyskują dostęp do aplikacji jako użytkownik. Testy jednostkowe uzyskują dostęp do niego pod maską. – Keith

1

Parasoft .TEST ma funkcjonalność generowania testów. Wykorzystuje strukturę NUnit do opisu testów i oceny asercji.

Możliwe jest przygotowanie zestawu testów regresji poprzez automatyczne generowanie scenariuszy (konstruowanie wejść i wywoływanie testowanej metody) oraz tworzenie asercji opartych na bieżącym zachowaniu bazy kodu. Później, gdy baza kodów w testach ewoluuje, asercje wskazują na regresje lub można je łatwo nagrać ponownie.

0

GennyMcGenFace tworzy testów jednostkowych dla każdego funkcja w klasie i generuje obiekty z losowymi słowami/wartościami w każdym parametrze.

  • Generowanie testów jednostkowych dla każdej funkcji w klasie
  • domyśla się prawidłowych wartości losowo generowane dla wejść paramater oraz rachunku zysków.
  • Mockable interfejsy powrotu prawidłowych wartości losowo generowanych
  • Generowanie testów jednostkowych dla każdej funkcji w klasie
  • Import wszystkie potrzebne przestrzenie nazw do swojej klasie testowej

Pomaga w tworzeniu swoich testów jednostkowych, szczególnie jeśli masz obiekty wejściowe z dużą ilością parametrów.

Test jednostka będzie wyglądać następująco

2

stworzyłem „ErrorUnit” i generuje testów jednostkowych NUnit lub MSTest z wstrzymanej Visual Studio lub z dzienników błędów; Prześmiewanie zmiennych klasowych, parametrów metod oraz dostęp do danych EF do tej pory. (http://ErrorUnit.com)

Żaden generator testu nie może zrobić wszystkiego; Testy jednostek są klasycznie rozdzielone na trzy części Rozmieść, Akt i Aserowanie; część "Rozmieść" jest największą częścią testu jednostkowego i ustawia wszystkie warunki wstępne do testu, kpiąc ze wszystkich danych, które będą wykonywane w teście, część Akt testu jednostkowego jest zwykle jedną linią i aktywuje część testowanego kodu przechodzi przez te dane, a na koniec część testowa testu przyjmuje wyniki części Act i sprawdza, czy spełniła ona oczekiwania (może to być zero linii, gdy tylko upewniamy się, że nie ma błędu).

Generatory testów jednostkowych generalnie mogą wykonywać tylko części "Rozmieszczanie" i "Działaj" podczas tworzenia testów jednostkowych; jednak generatory testów jednostkowych na ogół nie piszą fragmentów "Aser", ponieważ tylko Ty wiesz, co jest poprawne, a co niewłaściwe dla twoich celów. Tak więc ręczne wprowadzanie/rozszerzanie testów jednostkowych jest konieczne dla kompletności.

+0

Podczas gdy ten link może odpowiedzieć na pytanie, lepiej umieścić tutaj istotne części odpowiedzi i podać link do odsyłacza. Odpowiedzi dotyczące linków mogą stać się nieprawidłowe, jeśli strona z linkami się zmieni. - [Z recenzji] (/ recenzja/niskiej jakości-posts/14272134) – Danh

+0

Oh i Pex, teraz jest Intellitest [link] (https://msdn.microsoft.com/en-us/library/dn823749.aspx) – johng

Powiązane problemy