Mam klasę Java. Jak mogę to przetestować jednostkowo ?
W moim przypadku mam klasę robi sumę binarną. Pobiera dwie byte[]
tablice, sumuje je i zwraca nową tablicę binarną.
java
unit-testing
Tsundoku
źródło
źródło
Odpowiedzi:
Zdefiniuj oczekiwane i pożądane dane wyjściowe dla normalnego przypadku, z poprawnymi danymi wejściowymi.
Teraz zaimplementuj test, deklarując klasę, nazwij ją dowolnie (zwykle coś w rodzaju TestAddingModule) i dodaj do niego metodę testAdd (tj. Taką jak ta poniżej):
assertEquals(expectedVal,calculatedVal)
.Przetestuj swoją metodę, uruchamiając ją (w Eclipse kliknij prawym przyciskiem myszy, wybierz Uruchom jako → Test JUnit).
Dodaj inne przypadki według potrzeb.
Sprawdź, czy Twoja metoda z wdziękiem obsługuje dane wejściowe o wartości Null (przykład poniżej).
źródło
@Test
notacja jest wymagana. Ma to na celu zasygnalizowanie biegaczowi testów jednostkowych, że ta metoda reprezentuje test jednostkowy i powinna zostać wykonana. Metody bez adnotacji nie@Test
są wykonywane przez moduł uruchamiający testy.null
poy
prostu daćy
?static
do modyfikatora metody testowej.Udostępniam ten post zarówno dla IntelliJ, jak i Eclipse .
Zaćmienie:
Aby wykonać test jednostkowy dla swojego projektu, wykonaj następujące kroki (używam Eclipse do napisania tego testu):
1- Kliknij Nowy -> Projekt Java.
2- Zapisz nazwę swojego projektu i kliknij Zakończ.
3- Kliknij prawym przyciskiem myszy swój projekt. Następnie kliknij Nowy -> Klasa.
4- Zapisz nazwę swojej klasy i kliknij Zakończ.
Następnie wypełnij zajęcia w ten sposób:
5- Kliknij Plik -> Nowy -> Przypadek testowy JUnit.
6- Sprawdź setUp () i kliknij Zakończ. SetUp () będzie miejscem, w którym zainicjujesz swój test.
7- Kliknij OK.
8- Tutaj po prostu dodaję 7 i 10. Tak więc oczekuję, że odpowiedź będzie wynosić 17. Wypełnij klasę testową w ten sposób:
9- Napisz, kliknij swoją klasę testową w eksploratorze pakietów i kliknij Uruchom jako -> Test JUnit.
10- To jest wynik testu.
IntelliJ: Zwróć uwagę, że do zrzutów ekranu użyłem społeczności IntelliJ IDEA 2020.1. Przed wykonaniem tych czynności musisz również skonfigurować środowisko JRE. Używam JDK 11.0.4.
1- Kliknij prawym przyciskiem myszy główny folder projektu -> nowy -> katalog. Powinieneś nazwać to „testem”. 2- Kliknij prawym przyciskiem myszy folder testowy i utwórz odpowiedni pakiet. Proponuję stworzyć takie same nazwy opakowań, jak oryginalna klasa. Następnie kliknij prawym przyciskiem myszy katalog testowy -> zaznacz katalog jako -> źródło testowe root. 3- W odpowiednim pakiecie w katalogu testowym musisz utworzyć klasę Java (proponuję użyć Test.java). 4- W utworzonej klasie wpisz „@Test”. Następnie spośród opcji, które daje IntelliJ, wybierz Dodaj „JUnitx” do ścieżki klas. 5- Napisz swoją metodę testową w klasie testowej. Podpis metody wygląda następująco:
Możesz zrobić swoje asercje jak poniżej:
Oto import, który dodałem:
Oto test, który napisałem:
Możesz sprawdzić swoje metody, jak poniżej:
Aby uruchomić testy jednostkowe, kliknij prawym przyciskiem myszy test i kliknij Uruchom.
Jeśli twój test przejdzie pomyślnie, wynik będzie taki jak poniżej:
Mam nadzieję, że to pomoże. Możesz zobaczyć strukturę projektu w GitHub https://github.com/m-vahidalizadeh/problem_solving_project .
źródło
Jest to bardzo ogólne pytanie, na które można odpowiedzieć na wiele sposobów.
Jeśli chcesz używać JUnit do tworzenia testów, musisz utworzyć swoją klasę testcase, a następnie utworzyć indywidualne metody testowe, które testują określoną funkcjonalność Twojej klasy / modułu w ramach testów (pojedyncze klasy przypadków testowych są zwykle powiązane z jedną klasą „produkcyjną”, która jest testowany) i wewnątrz tych metod wykonuj różne operacje i porównuj wyniki z tym, co byłoby poprawne. Szczególnie ważne jest, aby spróbować objąć jak najwięcej przypadków narożnych.
W swoim konkretnym przykładzie możesz na przykład przetestować następujące elementy:
Aby zweryfikować wyniki, możesz użyć różnych metod assertXXX z klasy org.junit.Assert (dla wygody możesz wykonać „import static org.junit.Assert. *”). Te metody sprawdzają określony warunek i kończą się niepowodzeniem, jeśli nie sprawdzają poprawności (opcjonalnie z określonym komunikatem).
Przykładowa klasa testcase w Twoim przypadku (bez zdefiniowanej zawartości metod):
Jeśli nie jesteś przyzwyczajony do pisania testów jednostkowych, ale zamiast tego testujesz swój kod pisząc testy ad-hoc, które następnie sprawdzasz "wizualnie" (na przykład piszesz prostą główną metodę, która akceptuje argumenty wprowadzone przy użyciu klawiatury i następnie wypisuje wyniki - a następnie kontynuujesz wprowadzanie wartości i sprawdzanie siebie, czy wyniki są poprawne), możesz zacząć od napisania takich testów w powyższym formacie i walidacji wyników za pomocą poprawnej metody assertXXX zamiast robić to ręcznie. W ten sposób możesz ponownie uruchomić test znacznie łatwiej niż gdybyś musiał wykonać testy ręczne.
źródło
Jak wspomniano @CoolBeans, spójrz na jUnit . Oto krótki samouczek, który pomoże Ci rozpocząć pracę z jUnit 4.x
Na koniec, jeśli naprawdę chcesz dowiedzieć się więcej o testowaniu i programowaniu opartym na testach (TDD), polecam zajrzeć do następującej książki autorstwa Kenta Becka: Test-Driven Development By Example .
źródło
Inne odpowiedzi pokazały, jak używać JUnit do konfigurowania klas testowych. JUnit to nie jedyna platforma testowa Java. Koncentrując się na technicznych szczegółach korzystania z frameworka, jednak odwraca uwagę od najważniejszych koncepcji, które powinny kierować Twoimi działaniami, więc o nich opowiem.
Testowanie (wszelkiego rodzaju rzeczy) porównuje rzeczywiste zachowanie czegoś (testowany system, SUT) z jego oczekiwanym zachowaniem.
Testowanie automatyczne można przeprowadzić za pomocą programu komputerowego. Ponieważ porównania dokonuje nieelastyczny i nieinteligentny program komputerowy, oczekiwane zachowanie musi być dokładnie i jednoznacznie znane.
To, czego oczekuje się od programu lub części programu (klasy lub metody), to jego specyfikacja . Dlatego testowanie oprogramowania wymaga posiadania specyfikacji dla SUT. Może to być wyraźny opis lub niejawna specyfikacja w Twojej głowie tego, czego się spodziewasz.
Dlatego zautomatyzowane testowanie jednostkowe wymaga precyzyjnej i jednoznacznej specyfikacji testowanej klasy lub metody.
Ale potrzebowałeś tej specyfikacji, kiedy zaczynałeś pisać ten kod. Tak więc część tego, o co chodzi w testowaniu, zaczyna się tak naprawdę, zanim napiszesz choćby jedną linijkę testu SUT. Technika testowania Test Driven Development (TDD) doprowadza ten pomysł do skrajności i polega na utworzeniu kodu testów jednostkowych przed napisaniem kodu, który ma być testowany.
Struktury testów jednostkowych testują SUT przy użyciu asercji . Asercja to wyrażenie logiczne (wyrażenie z
boolean
typem wyniku; predykat ), które musi być,true
jeśli SUT zachowuje się poprawnie. Specyfikacja musi zatem zostać wyrażona (lub ponownie wyrażona) jako stwierdzenia.Użyteczną techniką wyrażania specyfikacji jako asercji jest programowanie na podstawie kontraktu . Te specyfikacje dotyczą warunków końcowych . Warunek końcowy to stwierdzenie o publicznie widocznym stanie SUT po powrocie z metody lub konstruktora. Niektóre metody mają warunki końcowe, które są niezmiennymi , czyli predykatami, które są prawdziwe przed i po wykonaniu metody. Klasa może być również powiedział, że niezmienniki, które są postconditions każdego konstruktora i metody klasy, a więc powinny zawsze być prawdziwe. Warunki końcowe (i niezmienniki) są wyrażone tylko w postaci widocznego stanu reklamy:
public
iprotected
pól, wartości zwróconych przezpublic
iprotected
metody (takie jak pobierające) oraz publicznie widoczny stan obiektów przekazanych (przez odwołanie) do metod.Wielu początkujących zadaje tutaj pytania z pytaniem, w jaki sposób mogą przetestować jakiś kod, prezentując kod, ale bez podawania specyfikacji tego kodu. Jak pokazuje ta dyskusja, nikt nie jest w stanie udzielić dobrej odpowiedzi na takie pytanie, ponieważ w najlepszym przypadku potencjalni respondenci muszą odgadnąć specyfikację i mogą to zrobić niepoprawnie. Pytający w rachubę widocznie nie rozumie znaczenie specyfikacji, a zatem jest nowicjuszem, który musi zrozumieć podstawy Opisałem tutaj przed próbuje napisać kod testowy.
źródło