JUnit - Szybki przewodnik
Testowanie to proces sprawdzania funkcjonalności aplikacji w celu upewnienia się, że działa ona zgodnie z wymaganiami. Testowanie jednostkowe pojawia się na poziomie deweloperów; jest to testowanie pojedynczej jednostki (klasy lub metody). Testy jednostkowe odgrywają kluczową rolę, pomagając firmie programistycznej dostarczać klientom produkty wysokiej jakości.
Testowanie jednostkowe można przeprowadzić na dwa sposoby - testowanie ręczne i testowanie automatyczne.
Testowanie ręczne | Testowanie automatyczne |
---|---|
Ręczne wykonywanie przypadków testowych bez wsparcia narzędzi jest nazywane testowaniem ręcznym. | Korzystanie ze wsparcia narzędziowego i wykonywanie przypadków testowych za pomocą narzędzia do automatyzacji jest znane jako testowanie automatyzacji. |
Time-consuming and tedious - Ponieważ przypadki testowe są wykonywane przez zasoby ludzkie, jest to bardzo powolne i żmudne. | Fast - Automatyzacja uruchamia przypadki testowe znacznie szybciej niż zasoby ludzkie. |
Huge investment in human resources - Ponieważ przypadki testowe muszą być wykonywane ręcznie, do testowania ręcznego potrzeba więcej testerów. | Less investment in human resources - Przypadki testowe są wykonywane przy użyciu narzędzi do automatyzacji, więc w testowaniu automatyzacji wymagana jest mniejsza liczba testerów. |
Less reliable - Testowanie ręczne jest mniej niezawodne, ponieważ musi uwzględniać błędy ludzkie. | More reliable - Testy automatyczne są precyzyjne i wiarygodne. |
Non-programmable - Nie można programować, aby napisać zaawansowane testy w celu pobrania ukrytych informacji. | Programmable - Testerzy mogą programować zaawansowane testy, aby wydobyć ukryte informacje. |
Co to jest JUnit?
JUnit to platforma do testów jednostkowych dla języka programowania Java. Odgrywa kluczową rolę w programowaniu opartym na testach i jest rodziną frameworków do testowania jednostkowego zwanych łącznie xUnit.
JUnit promuje ideę „najpierw testowania, a następnie kodowania”, która kładzie nacisk na konfigurowanie danych testowych dla fragmentu kodu, który można najpierw przetestować, a następnie zaimplementować. To podejście przypomina „trochę przetestuj, trochę zakoduj, trochę przetestuj, trochę zakoduj”. Zwiększa produktywność programisty i stabilność kodu programu, co z kolei zmniejsza stres programisty i czas poświęcany na debugowanie.
Funkcje JUnit
JUnit to framework open source, który służy do pisania i uruchamiania testów.
Zawiera adnotacje umożliwiające identyfikację metod testowych.
Zapewnia potwierdzenia do testowania oczekiwanych wyników.
Udostępnia programy uruchamiające testy do przeprowadzania testów.
Testy JUnit pozwalają na szybsze pisanie kodów, co podnosi jakość.
JUnit jest elegancko prosty. Jest mniej skomplikowany i zajmuje mniej czasu.
Testy JUnit mogą być uruchamiane automatycznie i sprawdzają własne wyniki i zapewniają natychmiastową informację zwrotną. Nie ma potrzeby ręcznego przeczesywania raportu wyników testu.
Testy JUnit można organizować w zestawy testów zawierające przypadki testowe, a nawet inne zestawy testów.
JUnit pokazuje postęp testu na pasku, który jest zielony, jeśli test przebiega płynnie, a zmienia kolor na czerwony, gdy test się nie powiedzie.
Co to jest przypadek testu jednostkowego?
Przypadek testu jednostkowego to część kodu, która zapewnia, że inna część kodu (metoda) działa zgodnie z oczekiwaniami. Aby szybko osiągnąć pożądane wyniki, wymagana jest platforma testowa. JUnit to doskonała platforma do testów jednostkowych dla języka programowania Java.
Formalny pisemny przypadek testu jednostkowego charakteryzuje się znanymi danymi wejściowymi i oczekiwanymi danymi wyjściowymi, które są opracowywane przed wykonaniem testu. Znane dane wejściowe powinny testować warunek wstępny, a oczekiwane dane wyjściowe powinny testować warunek końcowy.
Dla każdego wymagania muszą istnieć co najmniej dwa przypadki testów jednostkowych - jeden test pozytywny i jeden test negatywny. Jeśli wymaganie zawiera wymagania podrzędne, każde wymaganie podrzędne musi mieć co najmniej dwa przypadki testowe jako pozytywne i negatywne.
Konfiguracja środowiska lokalnego
JUnit to framework dla Javy, więc pierwszym wymaganiem jest zainstalowanie JDK na twoim komputerze.
Wymagania systemowe
JDK | 1.5 lub nowszy. |
---|---|
Pamięć | Brak minimalnych wymagań. |
Miejsca na dysku | Brak minimalnych wymagań. |
System operacyjny | Brak minimalnych wymagań. |
Krok 1: Zweryfikuj instalację Java na swoim komputerze
Przede wszystkim otwórz konsolę i wykonaj polecenie java w oparciu o system operacyjny, na którym pracujesz.
OS | Zadanie | Komenda |
---|---|---|
Windows | Otwórz konsolę poleceń | c: \> java -version |
Linux | Otwórz terminal poleceń | $ java -version |
Prochowiec | Otwórz terminal | maszyna: ~ joseph $ java -version |
Sprawdźmy dane wyjściowe dla wszystkich systemów operacyjnych -
OS | Wynik |
---|---|
Windows | wersja java „1.8.0_101” Java (TM) SE Runtime Environment (kompilacja 1.8.0_101) |
Linux | wersja java „1.8.0_101” Java (TM) SE Runtime Environment (kompilacja 1.8.0_101) |
Prochowiec | wersja java „1.8.0_101” Java (TM) SE Runtime Environment (kompilacja 1.8.0_101) |
Jeśli nie masz zainstalowanej Java w swoim systemie, pobierz pakiet Java Software Development Kit (SDK) z poniższego łącza https://www.oracle.com. Zakładamy Java 1.8.0_101 jako zainstalowaną wersję tego samouczka.
Krok 2: Ustaw środowisko JAVA
Ustaw JAVA_HOMEzmienna środowiskowa wskazująca lokalizację katalogu podstawowego, w którym na komputerze jest zainstalowana Java. Na przykład.
OS | Wynik |
---|---|
Windows | Ustaw zmienną środowiskową JAVA_HOME na C: \ Program Files \ Java \ jdk1.8.0_101 |
Linux | eksportuj JAVA_HOME = / usr / local / java-current |
Prochowiec | eksportuj JAVA_HOME = / Library / Java / Home |
Dołącz lokalizację kompilatora Java do ścieżki systemowej.
OS | Wynik |
---|---|
Windows | Dołącz ciąg C:\Program Files\Java\jdk1.8.0_101\bin na końcu zmiennej systemowej, Path. |
Linux | eksportuj PATH = $PATH:$JAVA_HOME / bin / |
Prochowiec | nie wymagane |
Sprawdź instalację oprogramowania Java za pomocą polecenia java -version jak wyjaśniono powyżej.
Krok 3: Pobierz archiwum JUnit
Pobierz najnowszą wersję pliku jar JUnit z witryny http://www.junit.org. W czasie pisania tego samouczka pobraliśmy Junit-4.12.jar i skopiowaliśmy go do folderu C: \> JUnit.
OS | Nazwa archiwum |
---|---|
Windows | junit4.12.jar |
Linux | junit4.12.jar |
Prochowiec | junit4.12.jar |
Krok 4: Ustaw środowisko JUnit
Ustaw JUNIT_HOMEzmienna środowiskowa, aby wskazać lokalizację katalogu podstawowego, w którym na komputerze jest przechowywany JUNIT jar. Załóżmy, że przechowujemy junit4.12.jar w folderze JUNIT.
Sr.No | System operacyjny i opis |
---|---|
1 | Windows Ustaw zmienną środowiskową JUNIT_HOME na C: \ JUNIT |
2 | Linux export JUNIT_HOME = / usr / local / JUNIT |
3 | Mac eksportuj JUNIT_HOME = / Library / JUNIT |
Krok 5: Ustaw zmienną CLASSPATH
Ustaw CLASSPATH zmienna środowiskowa wskazująca lokalizację jar JUNIT.
Sr.No | System operacyjny i opis |
---|---|
1 | Windows Ustaw zmienną środowiskową CLASSPATH na% CLASSPATH%;% JUNIT_HOME% \ junit4.12.jar;.; |
2 | Linux eksportuj CLASSPATH = $CLASSPATH:$JUNIT_HOME / junit4.12.jar :. |
3 | Mac eksportuj CLASSPATH = $CLASSPATH:$JUNIT_HOME / junit4.12.jar :. |
Krok 6: Przetestuj JUnit Setup
Utwórz nazwę pliku klasy Java TestJunit in C:\>JUNIT_WORKSPACE
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class TestJunit {
@Test
public void testAdd() {
String str = "Junit is working fine";
assertEquals("Junit is working fine",str);
}
}
Utwórz nazwę pliku klasy Java TestRunner w programie C:\>JUNIT_WORKSPACE do wykonania przypadków testowych.
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(TestJunit.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
Krok 7: Sprawdź wynik
Skompiluj klasy przy użyciu javac kompilator w następujący sposób -
C:\JUNIT_WORKSPACE>javac TestJunit.java TestRunner.java
Teraz uruchom Test Runner, aby zobaczyć wynik w następujący sposób -
C:\JUNIT_WORKSPACE>java TestRunner
Sprawdź dane wyjściowe.
true
JUnit to Regression Testing Frameworkużywany przez programistów do implementacji testów jednostkowych w Javie i przyspieszenia programowania oraz podniesienia jakości kodu. JUnit Framework można łatwo zintegrować z jednym z następujących:
- Eclipse
- Ant
- Maven
Funkcje JUnit Test Framework
Framework testowy JUnit zapewnia następujące ważne funkcje -
- Fixtures
- Zestawy testowe
- Biegacze testowi
- Klasy JUnit
Oprawy
Fixturesjest ustalonym stanem zbioru obiektów używanym jako podstawa do uruchamiania testów. Celem osprzętu testowego jest zapewnienie, że istnieje dobrze znane i ustalone środowisko, w którym przeprowadzane są testy, tak aby wyniki były powtarzalne. Obejmuje -
- setUp (), która jest uruchamiana przed każdym wywołaniem testu.
- tearDown (), która jest uruchamiana po każdej metodzie testowej.
Sprawdźmy jeden przykład -
import junit.framework.*;
public class JavaTest extends TestCase {
protected int value1, value2;
// assigning the values
protected void setUp(){
value1 = 3;
value2 = 3;
}
// test method to add two values
public void testAdd(){
double result = value1 + value2;
assertTrue(result == 6);
}
}
Zestawy testowe
Zestaw testów zawiera kilka przypadków testów jednostkowych i uruchamia je razem. W JUnit zarówno adnotacje @RunWith, jak i @Suite są używane do uruchamiania testu pakietu. Poniżej podano przykład wykorzystujący klasy testowe TestJunit1 i TestJunit2.
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
//JUnit Suite Test
@RunWith(Suite.class)
@Suite.SuiteClasses({
TestJunit1.class ,TestJunit2.class
})
public class JunitTestSuite {
}
import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;
public class TestJunit1 {
String message = "Robert";
MessageUtil messageUtil = new MessageUtil(message);
@Test
public void testPrintMessage() {
System.out.println("Inside testPrintMessage()");
assertEquals(message, messageUtil.printMessage());
}
}
import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;
public class TestJunit2 {
String message = "Robert";
MessageUtil messageUtil = new MessageUtil(message);
@Test
public void testSalutationMessage() {
System.out.println("Inside testSalutationMessage()");
message = "Hi!" + "Robert";
assertEquals(message,messageUtil.salutationMessage());
}
}
Testuj biegaczy
Test runner służy do wykonywania przypadków testowych. Oto przykład, który zakłada klasę testowąTestJunit już istnieje.
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(TestJunit.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
Klasy JUnit
Klasy JUnit są ważnymi klasami używanymi do pisania i testowania JUnitów. Niektóre z ważnych klas to:
Assert - Zawiera zestaw metod potwierdzania.
TestCase - Zawiera przypadek testowy, który definiuje urządzenie do uruchamiania wielu testów.
TestResult - Zawiera metody zbierania wyników wykonania przypadku testowego.
Przejdźmy teraz do podstawowego przykładu pokazującego krok po kroku proces korzystania z JUnit.
Utwórz klasę
Utwórz klasę Java do przetestowania, na przykład MessageUtil.java in C:\>JUNIT_WORKSPACE
/*
* This class prints the given message on console.
*/
public class MessageUtil {
private String message;
//Constructor
//@param message to be printed
public MessageUtil(String message){
this.message = message;
}
// prints the message
public String printMessage(){
System.out.println(message);
return message;
}
}
Utwórz klasę przypadku testowego
- Utwórz klasę testową Java, na przykład TestJunit.java.
- Dodaj metodę testową testPrintMessage () do swojej klasy testowej.
- Dodaj Annotaion @Test do metody testPrintMessage ().
- Zaimplementuj warunek testowy i sprawdź warunek za pomocą funkcji API assertEquals JUnit.
Utwórz nazwę pliku klasy Java TestJunit.java w formacie C:\>JUNIT_WORKSPACE.
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class TestJunit {
String message = "Hello World";
MessageUtil messageUtil = new MessageUtil(message);
@Test
public void testPrintMessage() {
assertEquals(message,messageUtil.printMessage());
}
}
Utwórz testową klasę biegacza
- Utwórz klasę Java TestRunner.
- Użyj metody runClasses klasy JUnitCore klasy JUnit, aby uruchomić przypadek testowy powyższej klasy testowej.
- Uzyskaj wynik przypadków testowych uruchomionych w obiekcie Result.
- Uzyskaj niepowodzenie (a) za pomocą metody getFailures () obiektu Result.
- Uzyskaj wynik Success przy użyciu metody wasSuccessful () obiektu Result.
Utwórz plik klasy Java o nazwie TestRunner.java w programie C:\>JUNIT_WORKSPACE do wykonania przypadków testowych.
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(TestJunit.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
Skompiluj klasy MessageUtil, Test case i Test Runner przy użyciu javac.
C:\JUNIT_WORKSPACE>javac MessageUtil.java TestJunit.java TestRunner.java
Teraz uruchom Test Runner, który uruchomi przypadek testowy zdefiniowany w podanej klasie Test Case.
C:\JUNIT_WORKSPACE>java TestRunner
Sprawdź dane wyjściowe.
Hello World
true
Teraz zaktualizuj TestJunit w C:\>JUNIT_WORKSPACEtak, że test się nie powiedzie. Zmień ciąg wiadomości.
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class TestJunit {
String message = "Hello World";
MessageUtil messageUtil = new MessageUtil(message);
@Test
public void testPrintMessage() {
message = "New Word";
assertEquals(message,messageUtil.printMessage());
}
}
Zachowajmy resztę klas bez zmian i spróbujmy uruchomić tego samego testera.
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(TestJunit.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
Teraz uruchom Test Runner, który uruchomi przypadek testowy zdefiniowany w podanej klasie Test Case.
C:\JUNIT_WORKSPACE>java TestRunner
Sprawdź dane wyjściowe.
Hello World
testPrintMessage(TestJunit): expected:<[New Wor]d> but was:<[Hello Worl]d>
false
Najważniejszym pakietem w JUnit jest junit.framework, który zawiera wszystkie podstawowe klasy. Oto niektóre z ważnych klas:
Sr.No. | Nazwa klasy | Funkcjonalność |
---|---|---|
1 | Zapewniać | Zestaw metod asertywnych. |
2 | TestCase | Przypadek testowy definiuje urządzenie do uruchamiania wielu testów. |
3 | Wynik testu | TestResult zbiera wyniki wykonania przypadku testowego. |
4 | TestSuite | TestSuite to zbiór testów. |
Klasa Assert
Poniżej znajduje się deklaracja dla org.junit.Assert klasa -
public class Assert extends java.lang.Object
Ta klasa udostępnia zestaw metod potwierdzania przydatnych do pisania testów. Rejestrowane są tylko nieudane potwierdzenia. Oto niektóre z ważnych metod klasy Assert -
Sr.No. | Metody i opis |
---|---|
1 | void assertEquals(boolean expected, boolean actual) Sprawdza, czy dwa prymitywy / obiekty są równe. |
2 | void assertFalse(boolean condition) Sprawdza, czy warunek jest fałszywy. |
3 | void assertNotNull(Object object) Sprawdza, czy obiekt nie jest pusty. |
4 | void assertNull(Object object) Sprawdza, czy obiekt ma wartość null. |
5 | void assertTrue(boolean condition) Sprawdza, czy warunek jest prawdziwy. |
6 | void fail() Test nie powiedzie się i nie ma wiadomości. |
Wykorzystajmy na przykładzie niektóre z wyżej wymienionych metod. Utwórz plik klasy Java o nazwie TestJunit1.java w formacieC:\>JUNIT_WORKSPACE.
import org.junit.Test;
import static org.junit.Assert.*;
public class TestJunit1 {
@Test
public void testAdd() {
//test data
int num = 5;
String temp = null;
String str = "Junit is working fine";
//check for equality
assertEquals("Junit is working fine", str);
//check for false condition
assertFalse(num > 6);
//check for not null value
assertNotNull(temp);
}
}
Następnie utwórz plik klasy Java o nazwie TestRunner1.java w C: \> JUNIT_WORKSPACE, aby wykonać przypadek testowy.
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner1 {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(TestJunit1.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
Skompiluj przypadek testowy i klasy Test Runner przy użyciu javac.
C:\JUNIT_WORKSPACE>javac TestJunit1.java TestRunner1.java
Teraz uruchom Test Runner, który uruchomi przypadek testowy zdefiniowany w podanej klasie Test Case.
C:\JUNIT_WORKSPACE>java TestRunner1
Sprawdź dane wyjściowe.
true
Klasa TestCase
Poniżej znajduje się deklaracja dla org.junit.TestCase klasa -
public abstract class TestCase extends Assert implements Test
Przypadek testowy definiuje urządzenie do uruchamiania wielu testów. Niektóre z ważnych metodTestCase klasa są następujące -
Sr.No. | Metody i opis |
---|---|
1 | int countTestCases() Zlicza liczbę przypadków testowych wykonanych przez uruchomienie (wynik TestResult). |
2 | TestResult createResult() Tworzy domyślny obiekt TestResult. |
3 | String getName() Pobiera nazwę TestCase. |
4 | TestResult run() Wygodna metoda uruchamiania tego testu polegająca na zbieraniu wyników za pomocą domyślnego obiektu TestResult. |
5 | void run(TestResult result) Uruchamia przypadek testowy i zbiera wyniki w TestResult. |
6 | void setName(String name) Ustawia nazwę przypadku TestCase. |
7 | void setUp() Konfiguruje urządzenie, na przykład otwiera połączenie sieciowe. |
8 | void tearDown() Zrywa urządzenie, na przykład zamyka połączenie sieciowe. |
9 | String toString() Zwraca ciąg znaków reprezentujący przypadek testowy. |
Wykorzystajmy na przykładzie niektóre z wyżej wymienionych metod. Utwórz plik klasy Java o nazwieTestJunit2.java w C: \> JUNIT_WORKSPACE.
import junit.framework.TestCase;
import org.junit.Before;
import org.junit.Test;
public class TestJunit2 extends TestCase {
protected double fValue1;
protected double fValue2;
@Before
public void setUp() {
fValue1 = 2.0;
fValue2 = 3.0;
}
@Test
public void testAdd() {
//count the number of test cases
System.out.println("No of Test Case = "+ this.countTestCases());
//test getName
String name = this.getName();
System.out.println("Test Case Name = "+ name);
//test setName
this.setName("testNewAdd");
String newName = this.getName();
System.out.println("Updated Test Case Name = "+ newName);
}
//tearDown used to close the connection or clean up activities
public void tearDown( ) {
}
}
Następnie utwórz plik klasy Java o nazwie TestRunner2.java w C: \> JUNIT_WORKSPACE, aby wykonać przypadek testowy.
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner2 {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(TestJunit2.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
Skompiluj przypadek testowy i klasy Test Runner przy użyciu javac.
C:\JUNIT_WORKSPACE>javac TestJunit2.java TestRunner2.java
Teraz uruchom Test Runner, który uruchomi przypadek testowy zdefiniowany w podanej klasie Test Case.
C:\JUNIT_WORKSPACE>java TestRunner2
Sprawdź dane wyjściowe.
No of Test Case = 1
Test Case Name = testAdd
Updated Test Case Name = testNewAdd
true
Klasa TestResult
Poniżej znajduje się deklaracja dla org.junit.TestResult klasa -
public class TestResult extends Object
TestResult zbiera wyniki wykonania przypadku testowego. Jest to instancja wzorca Collecting Parameter. Struktura testów rozróżnia niepowodzenia i błędy. Awaria jest przewidywana i sprawdzana za pomocą asercji. Błędy to nieoczekiwane problemy, takie jak wyjątek ArrayIndexOutOfBoundsException. Niektóre z ważnych metodTestResult klasa są następujące -
Sr.No. | Metody i opis |
---|---|
1 | void addError(Test test, Throwable t) Dodaje błąd do listy błędów. |
2 | void addFailure(Test test, AssertionFailedError t) Dodaje awarię do listy awarii. |
3 | void endTest(Test test) Informuje wynik, że test został zakończony. |
4 | int errorCount() Pobiera liczbę wykrytych błędów. |
5 | Enumeration<TestFailure> errors() Zwraca wyliczenie dla błędów. |
6 | int failureCount() Pobiera liczbę wykrytych błędów. |
7 | void run(TestCase test) Uruchamia testCase. |
8 | int runCount() Pobiera liczbę uruchomionych testów. |
9 | void startTest(Test test) Informuje wynik, że test zostanie uruchomiony. |
10 | void stop() Oznaczenia, że uruchomienie próbne powinno się zakończyć. |
Utwórz plik klasy Java o nazwie TestJunit3.java w C: \> JUNIT_WORKSPACE.
import org.junit.Test;
import junit.framework.AssertionFailedError;
import junit.framework.TestResult;
public class TestJunit3 extends TestResult {
// add the error
public synchronized void addError(Test test, Throwable t) {
super.addError((junit.framework.Test) test, t);
}
// add the failure
public synchronized void addFailure(Test test, AssertionFailedError t) {
super.addFailure((junit.framework.Test) test, t);
}
@Test
public void testAdd() {
// add any test
}
// Marks that the test run should stop.
public synchronized void stop() {
//stop the test here
}
}
Następnie utwórz plik klasy Java o nazwie TestRunner3.java w C: \> JUNIT_WORKSPACE, aby wykonać przypadek testowy.
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner3 {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(TestJunit3.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
Skompiluj przypadek testowy i klasy Test Runner przy użyciu javac.
C:\JUNIT_WORKSPACE>javac TestJunit3.java TestRunner3.java
Teraz uruchom Test Runner, który uruchomi przypadek testowy zdefiniowany w podanej klasie Test Case.
C:\JUNIT_WORKSPACE>java TestRunner3
Sprawdź dane wyjściowe.
true
Klasa TestSuite
Poniżej znajduje się deklaracja dla org.junit.TestSuite klasa:
public class TestSuite extends Object implements Test
TestSuite to zbiór testów. Uruchamia zbiór przypadków testowych. Niektóre z ważnych metodTestSuite klasa są następujące -
Sr.No. | Metody i opis |
---|---|
1 | void addTest(Test test) Dodaje test do zestawu. |
2 | void addTestSuite(Class<? extends TestCase> testClass) Dodaje testy z danej klasy do pakietu. |
3 | int countTestCases() Zlicza liczbę przypadków testowych, które zostaną uruchomione przez ten test. |
4 | String getName() Zwraca nazwę zestawu. |
5 | void run(TestResult result) Uruchamia testy i zbiera ich wynik w TestResult. |
6 | void setName(String name) Ustawia nazwę pakietu. |
7 | Test testAt(int index) Zwraca test o podanym indeksie. |
8 | int testCount() Zwraca liczbę testów w tym zestawie. |
9 | static Test warning(String message) Zwraca test, który zakończy się niepowodzeniem i zarejestruje komunikat ostrzegawczy. |
Utwórz plik klasy Java o nazwie JunitTestSuite.java w C: \> JUNIT_WORKSPACE, aby utworzyć zestaw testów.
import junit.framework.*;
public class JunitTestSuite {
public static void main(String[] a) {
// add the test's in the suite
TestSuite suite = new TestSuite(TestJunit1.class, TestJunit2.class, TestJunit3.class );
TestResult result = new TestResult();
suite.run(result);
System.out.println("Number of test cases = " + result.runCount());
}
}
Skompiluj klasy zestawu testów przy użyciu javac.
C:\JUNIT_WORKSPACE>javac JunitTestSuite.java
Teraz uruchom Test Suite.
C:\JUNIT_WORKSPACE>java JunitTestSuite
Sprawdź dane wyjściowe.
No of Test Case = 1
Test Case Name = testAdd
Updated Test Case Name = testNewAdd
Number of test cases = 3
Tutaj zobaczymy jeden kompletny przykład testowania JUnit przy użyciu klasy POJO, klasy logiki biznesowej i klasy testowej, które zostaną uruchomione przez moduł uruchamiający testy.
Stwórz EmployeeDetails.java w C: \> JUNIT_WORKSPACE, która jest klasą POJO.
public class EmployeeDetails {
private String name;
private double monthlySalary;
private int age;
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the monthlySalary
*/
public double getMonthlySalary() {
return monthlySalary;
}
/**
* @param monthlySalary the monthlySalary to set
*/
public void setMonthlySalary(double monthlySalary) {
this.monthlySalary = monthlySalary;
}
/**
* @return the age
*/
public int getAge() {
return age;
}
/**
* @param age the age to set
*/
public void setAge(int age) {
this.age = age;
}
}
EmployeeDetails klasa jest używana do -
- pobierz / ustaw wartość nazwiska pracownika.
- uzyskać / ustawić wysokość miesięcznego wynagrodzenia pracownika.
- pobrać / ustawić wartość wieku pracownika.
Utwórz plik o nazwie EmpBusinessLogic.java w C: \> JUNIT_WORKSPACE, który zawiera logikę biznesową.
public class EmpBusinessLogic {
// Calculate the yearly salary of employee
public double calculateYearlySalary(EmployeeDetails employeeDetails) {
double yearlySalary = 0;
yearlySalary = employeeDetails.getMonthlySalary() * 12;
return yearlySalary;
}
// Calculate the appraisal amount of employee
public double calculateAppraisal(EmployeeDetails employeeDetails) {
double appraisal = 0;
if(employeeDetails.getMonthlySalary() < 10000){
appraisal = 500;
}else{
appraisal = 1000;
}
return appraisal;
}
}
EmpBusinessLogic klasa służy do obliczania -
- roczne wynagrodzenie pracownika.
- wycenę pracownika.
Utwórz plik o nazwie TestEmployeeDetails.java w C: \> JUNIT_WORKSPACE, który zawiera przypadki testowe do przetestowania.
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class TestEmployeeDetails {
EmpBusinessLogic empBusinessLogic = new EmpBusinessLogic();
EmployeeDetails employee = new EmployeeDetails();
//test to check appraisal
@Test
public void testCalculateAppriasal() {
employee.setName("Rajeev");
employee.setAge(25);
employee.setMonthlySalary(8000);
double appraisal = empBusinessLogic.calculateAppraisal(employee);
assertEquals(500, appraisal, 0.0);
}
// test to check yearly salary
@Test
public void testCalculateYearlySalary() {
employee.setName("Rajeev");
employee.setAge(25);
employee.setMonthlySalary(8000);
double salary = empBusinessLogic.calculateYearlySalary(employee);
assertEquals(96000, salary, 0.0);
}
}
TestEmployeeDetails klasa służy do testowania metod EmpBusinessLogicklasa. To
- testuje roczne wynagrodzenie pracownika.
- sprawdza wycenę pracownika.
Następnie utwórz plik klasy java o nazwie TestRunner.java w C: \> JUNIT_WORKSPACE, aby wykonać przypadek testowy.
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(TestEmployeeDetails.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
Skompiluj przypadek testowy i klasy Test Runner przy użyciu javac.
C:\JUNIT_WORKSPACE>javac EmployeeDetails.java
EmpBusinessLogic.java TestEmployeeDetails.java TestRunner.java
Teraz uruchom Test Runner, który uruchomi przypadek testowy zdefiniowany w podanej klasie Test Case.
C:\JUNIT_WORKSPACE>java TestRunner
Sprawdź dane wyjściowe.
true
Twierdzenie
Wszystkie potwierdzenia znajdują się w klasie Assert.
public class Assert extends java.lang.Object
Ta klasa udostępnia zestaw metod potwierdzania przydatnych przy pisaniu testów. Rejestrowane są tylko nieudane potwierdzenia. Oto niektóre z ważnych metod klasy Assert -
Sr.No. | Metody i opis |
---|---|
1 | void assertEquals(boolean expected, boolean actual) Sprawdza, czy dwa prymitywy / obiekty są równe. |
2 | void assertTrue(boolean condition) Sprawdza, czy warunek jest prawdziwy. |
3 | void assertFalse(boolean condition) Sprawdza, czy warunek jest fałszywy. |
4 | void assertNotNull(Object object) Sprawdza, czy obiekt nie jest pusty. |
5 | void assertNull(Object object) Sprawdza, czy obiekt ma wartość null. |
6 | void assertSame(object1, object2) Metoda assertSame () sprawdza, czy dwa odwołania do obiektów wskazują na ten sam obiekt. |
7 | void assertNotSame(object1, object2) Metoda assertNotSame () sprawdza, czy dwa odwołania do obiektów nie wskazują na ten sam obiekt. |
8 | void assertArrayEquals(expectedArray, resultArray); Metoda assertArrayEquals () sprawdzi, czy dwie tablice są sobie równe. |
Wykorzystajmy na przykładzie niektóre z wyżej wymienionych metod. Utwórz plik klasy Java o nazwieTestAssertions.java w C: \> JUNIT_WORKSPACE.
import org.junit.Test;
import static org.junit.Assert.*;
public class TestAssertions {
@Test
public void testAssertions() {
//test data
String str1 = new String ("abc");
String str2 = new String ("abc");
String str3 = null;
String str4 = "abc";
String str5 = "abc";
int val1 = 5;
int val2 = 6;
String[] expectedArray = {"one", "two", "three"};
String[] resultArray = {"one", "two", "three"};
//Check that two objects are equal
assertEquals(str1, str2);
//Check that a condition is true
assertTrue (val1 < val2);
//Check that a condition is false
assertFalse(val1 > val2);
//Check that an object isn't null
assertNotNull(str1);
//Check that an object is null
assertNull(str3);
//Check if two object references point to the same object
assertSame(str4,str5);
//Check if two object references not point to the same object
assertNotSame(str1,str3);
//Check whether two arrays are equal to each other.
assertArrayEquals(expectedArray, resultArray);
}
}
Następnie utwórz plik klasy Java o nazwie TestRunner.java w C: \> JUNIT_WORKSPACE, aby wykonać przypadek testowy.
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner2 {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(TestAssertions.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
Skompiluj klasy Test case i Test Runner przy użyciu javac.
C:\JUNIT_WORKSPACE>javac TestAssertions.java TestRunner.java
Teraz uruchom Test Runner, który uruchomi przypadek testowy zdefiniowany w podanej klasie Test Case.
C:\JUNIT_WORKSPACE>java TestRunner
Sprawdź dane wyjściowe.
true
Adnotacja
Adnotacje są jak metatagi, które można dodawać do kodu i stosować do metod lub w klasie. Te adnotacje w JUnit zawierają następujące informacje o metodach testowych -
- które metody będą uruchamiane przed i po metodach testowych.
- które metody są uruchamiane przed i po wszystkich metodach oraz.
- które metody lub klasy zostaną zignorowane podczas wykonywania.
Poniższa tabela zawiera listę adnotacji i ich znaczenie w JUnit -
Sr.No. | Adnotacja i opis |
---|---|
1 | @Test Adnotacja Test informuje JUnit, że publiczną metodę void, do której jest dołączona, można uruchomić jako przypadek testowy. |
2 | @Before Niektóre testy wymagają utworzenia podobnych obiektów, zanim będą mogły zostać uruchomione. Adnotowanie publicznej metody void za pomocą @Before powoduje, że ta metoda jest uruchamiana przed każdą metodą Test. |
3 | @After Jeśli przydzielasz zasoby zewnętrzne w metodzie Before, musisz zwolnić je po uruchomieniu testu. Adnotacja publicznej metody void za pomocą @After powoduje, że ta metoda jest uruchamiana po metodzie Test. |
4 | @BeforeClass Dodanie adnotacji do publicznej statycznej metody void za pomocą @BeforeClass powoduje, że jest ona uruchamiana raz przed którąkolwiek z metod testowych w klasie. |
5 | @AfterClass Spowoduje to wykonanie metody po zakończeniu wszystkich testów. Można to wykorzystać do wykonywania czynności porządkowych. |
6 | @Ignore Adnotacja Ignoruj służy do zignorowania testu i ten test nie zostanie wykonany. |
Utwórz plik klasy Java o nazwie JunitAnnotation.java w C: \> JUNIT_WORKSPACE, aby przetestować adnotację.
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
public class JunitAnnotation {
//execute before class
@BeforeClass
public static void beforeClass() {
System.out.println("in before class");
}
//execute after class
@AfterClass
public static void afterClass() {
System.out.println("in after class");
}
//execute before test
@Before
public void before() {
System.out.println("in before");
}
//execute after test
@After
public void after() {
System.out.println("in after");
}
//test case
@Test
public void test() {
System.out.println("in test");
}
//test case ignore and will not execute
@Ignore
public void ignoreTest() {
System.out.println("in ignore test");
}
}
Następnie utwórz plik klasy Java o nazwie TestRunner.java w C: \> JUNIT_WORKSPACE, aby wykonać adnotacje.
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(JunitAnnotation.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
Skompiluj klasy Test case i Test Runner przy użyciu javac.
C:\JUNIT_WORKSPACE>javac JunitAnnotation.java TestRunner.java
Teraz uruchom Test Runner, który uruchomi przypadek testowy zdefiniowany w podanej klasie Test Case.
C:\JUNIT_WORKSPACE>java TestRunner
Sprawdź dane wyjściowe.
in before class
in before
in test
in after
in after class
true
W tym rozdziale wyjaśniono procedurę wykonywania metod w JUnit, która definiuje kolejność wywoływanych metod. Poniżej omówiono procedurę wykonania metod testowego API JUnit wraz z przykładem.
Utwórz plik klasy Java o nazwie ExecutionProcedureJunit.java w C: \> JUNIT_WORKSPACE, aby przetestować adnotacje.
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
public class ExecutionProcedureJunit {
//execute only once, in the starting
@BeforeClass
public static void beforeClass() {
System.out.println("in before class");
}
//execute only once, in the end
@AfterClass
public static void afterClass() {
System.out.println("in after class");
}
//execute for each test, before executing test
@Before
public void before() {
System.out.println("in before");
}
//execute for each test, after executing test
@After
public void after() {
System.out.println("in after");
}
//test case 1
@Test
public void testCase1() {
System.out.println("in test case 1");
}
//test case 2
@Test
public void testCase2() {
System.out.println("in test case 2");
}
}
Następnie utwórz plik klasy Java o nazwie TestRunner.java w C: \> JUNIT_WORKSPACE, aby wykonać adnotacje.
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(ExecutionProcedureJunit.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
Skompiluj klasy Test case i Test Runner przy użyciu javac.
C:\JUNIT_WORKSPACE>javac ExecutionProcedureJunit.java TestRunner.java
Teraz uruchom Test Runner, który uruchomi przypadek testowy zdefiniowany w podanej klasie Test Case.
C:\JUNIT_WORKSPACE>java TestRunner
Sprawdź dane wyjściowe.
in before class
in before
in test case 1
in after
in before
in test case 2
in after
in after class
Zobacz powyższe dane wyjściowe. Procedura wykonania jest następująca -
- Przede wszystkim metoda beforeClass () jest wykonywana tylko raz.
- Metoda afterClass () jest wykonywana tylko raz.
- Metoda before () jest wykonywana dla każdego przypadku testowego, ale przed wykonaniem przypadku testowego.
- Metoda after () jest wykonywana dla każdego przypadku testowego, ale po wykonaniu przypadku testowego.
- Każdy przypadek testowy jest wykonywany pomiędzy before () i after ().
Przypadki testowe są wykonywane przy użyciu JUnitCoreklasa. JUnitCore to fasada do przeprowadzania testów. Obsługuje testy JUnit 4, testy JUnit 3.8.xi mieszanki. Aby uruchomić testy z wiersza poleceń, uruchom java org.junit.runner.JUnitCore <TestClass>. W przypadku jednorazowych przebiegów testowych użyj statycznej metody runClasses (Class []).
Poniżej znajduje się deklaracja dla org.junit.runner.JUnitCore klasa:
public class JUnitCore extends java.lang.Object
Tutaj zobaczymy, jak wykonać testy za pomocą JUnitCore.
Utwórz klasę
Utwórz klasę Java do przetestowania, powiedzmy MessageUtil.java, w C: \> JUNIT_WORKSPACE.
/*
* This class prints the given message on console.
*/
public class MessageUtil {
private String message;
//Constructor
//@param message to be printed
public MessageUtil(String message){
this.message = message;
}
// prints the message
public String printMessage(){
System.out.println(message);
return message;
}
}
Utwórz klasę przypadku testowego
Utwórz klasę testową Java, na przykład TestJunit.java.
Dodaj metodę testową testPrintMessage () do swojej klasy testowej.
Dodaj Annotaion @Test do metody testPrintMessage ().
Zaimplementuj warunek testowy i sprawdź warunek za pomocą funkcji API assertEquals JUnit.
Utwórz plik klasy Java o nazwie TestJunit.java w C: \> JUNIT_WORKSPACE.
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class TestJunit {
String message = "Hello World";
MessageUtil messageUtil = new MessageUtil(message);
@Test
public void testPrintMessage() {
assertEquals(message,messageUtil.printMessage());
}
}
Utwórz testową klasę biegacza
Teraz utwórz plik klasy java o nazwie TestRunner.javaw C: \> JUNIT_WORKSPACE, aby wykonać przypadek testowy. Importuje klasę JUnitCore i używa metody runClasses (), która jako parametr przyjmuje nazwę klasy testowej.
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(TestJunit.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
Skompiluj klasy Test case i Test Runner przy użyciu javac.
C:\JUNIT_WORKSPACE>javac MessageUtil.java TestJunit.java TestRunner.java
Teraz uruchom Test Runner, który uruchomi przypadek testowy zdefiniowany w podanej klasie Test Case.
C:\JUNIT_WORKSPACE>java TestRunner
Sprawdź dane wyjściowe.
Hello World
true
Test suitesłuży do spakowania kilku przypadków testów jednostkowych i uruchomienia ich razem. W JUnit oba@RunWith i @Suiteadnotacje są używane do uruchamiania testów zestawu. W tym rozdziale przedstawiono przykład dwóch klas testowych,TestJunit1 & TestJunit2, które działają razem przy użyciu Test Suite.
Utwórz klasę
Utwórz klasę Java do przetestowania, powiedzmy MessageUtil.java w C: \> JUNIT_WORKSPACE.
/*
* This class prints the given message on console.
*/
public class MessageUtil {
private String message;
//Constructor
//@param message to be printed
public MessageUtil(String message){
this.message = message;
}
// prints the message
public String printMessage(){
System.out.println(message);
return message;
}
// add "Hi!" to the message
public String salutationMessage(){
message = "Hi!" + message;
System.out.println(message);
return message;
}
}
Utwórz klasy przypadków testowych
Utwórz plik klasy Java o nazwie TestJunit1.java w C: \> JUNIT_WORKSPACE.
import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;
public class TestJunit1 {
String message = "Robert";
MessageUtil messageUtil = new MessageUtil(message);
@Test
public void testPrintMessage() {
System.out.println("Inside testPrintMessage()");
assertEquals(message, messageUtil.printMessage());
}
}
Utwórz plik klasy Java o nazwie TestJunit2.java w C: \> JUNIT_WORKSPACE.
import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;
public class TestJunit2 {
String message = "Robert";
MessageUtil messageUtil = new MessageUtil(message);
@Test
public void testSalutationMessage() {
System.out.println("Inside testSalutationMessage()");
message = "Hi!" + "Robert";
assertEquals(message,messageUtil.salutationMessage());
}
}
Utwórz klasę zestawu testów
- Utwórz klasę Java.
- Dołącz adnotację @RunWith (Suite.class) do klasy.
- Dodaj odwołanie do klas testowych JUnit za pomocą adnotacji @ Suite.SuiteClasses.
Utwórz plik klasy Java o nazwie TestSuite.java w C: \> JUNIT_WORKSPACE, aby wykonać przypadek testowy.
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({
TestJunit1.class,
TestJunit2.class
})
public class JunitTestSuite {
}
Utwórz testową klasę biegacza
Utwórz plik klasy Java o nazwie TestRunner.java w C: \> JUNIT_WORKSPACE, aby wykonać przypadek testowy.
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(JunitTestSuite.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
Skompiluj wszystkie klasy Java za pomocą javac.
C:\JUNIT_WORKSPACE>javac MessageUtil.java TestJunit1.java
TestJunit2.java JunitTestSuite.java TestRunner.java
Teraz uruchom Test Runner, który uruchomi przypadek testowy zdefiniowany w podanej klasie Test Case.
C:\JUNIT_WORKSPACE>java TestRunner
Sprawdź dane wyjściowe.
Inside testPrintMessage()
Robert
Inside testSalutationMessage()
Hi Robert
true
Czasami zdarza się, że nasz kod nie jest w pełni gotowy podczas uruchamiania przypadku testowego. W rezultacie przypadek testowy kończy się niepowodzeniem. Plik@Ignore adnotacja pomaga w tym scenariuszu.
Metoda testowa z adnotacją @Ignore nie zostanie wykonana.
Jeśli klasa testowa ma adnotację @Ignore, żadna z jej metod testowych nie zostanie wykonana.
Zobaczmy teraz @Ignore w akcji.
Utwórz klasę
Utwórz klasę Java do przetestowania, powiedzmy MessageUtil.java w C: \> JUNIT_WORKSPACE.
/*
* This class prints the given message on console.
*/
public class MessageUtil {
private String message;
//Constructor
//@param message to be printed
public MessageUtil(String message){
this.message = message;
}
// prints the message
public String printMessage(){
System.out.println(message);
return message;
}
// add "Hi!" to the message
public String salutationMessage(){
message = "Hi!" + message;
System.out.println(message);
return message;
}
}
Utwórz klasę przypadku testowego
Utwórz klasę testową Java, na przykład TestJunit.java.
Dodaj metodę testową testPrintMessage () lub testSalutationMessage () do swojej klasy testowej.
Dodaj Annotaion @Ignore do metody testPrintMessage ().
Utwórz plik klasy Java o nazwie TestJunit.java w C: \ JUNIT_WORKSPACE.
import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;
public class TestJunit {
String message = "Robert";
MessageUtil messageUtil = new MessageUtil(message);
@Ignore
@Test
public void testPrintMessage() {
System.out.println("Inside testPrintMessage()");
message = "Robert";
assertEquals(message,messageUtil.printMessage());
}
@Test
public void testSalutationMessage() {
System.out.println("Inside testSalutationMessage()");
message = "Hi!" + "Robert";
assertEquals(message,messageUtil.salutationMessage());
}
}
Utwórz testową klasę biegacza
Utwórz plik klasy Java o nazwie TestRunner.java w C: \> JUNIT_WORKSPACE, aby wykonać przypadek testowy.
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(TestJunit.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
Skompiluj klasy MessageUtil, Test case i Test Runner przy użyciu javac.
C:\JUNIT_WORKSPACE>javac MessageUtil.java TestJunit.java TestRunner.java
Teraz uruchom Test Runner, który nie uruchomi przypadku testowego testPrintMessage () zdefiniowanego w podanej klasie Test Case.
C:\JUNIT_WORKSPACE>java TestRunner
Sprawdź dane wyjściowe. Przypadek testowy testPrintMessage () nie jest testowany.
Inside testSalutationMessage()
Hi!Robert
true
Teraz zaktualizuj TestJunit w C: \> JUNIT_WORKSPACE, aby zignorować wszystkie przypadki testowe. Dodaj @Ignore na poziomie klasy.
import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;
@Ignore
public class TestJunit {
String message = "Robert";
MessageUtil messageUtil = new MessageUtil(message);
@Test
public void testPrintMessage() {
System.out.println("Inside testPrintMessage()");
message = "Robert";
assertEquals(message,messageUtil.printMessage());
}
@Test
public void testSalutationMessage() {
System.out.println("Inside testSalutationMessage()");
message = "Hi!" + "Robert";
assertEquals(message,messageUtil.salutationMessage());
}
}
Skompiluj przypadek testowy przy użyciu javac.
C:\JUNIT_WORKSPACE>javac TestJunit.java
Zachowaj swojego testera bez zmian w następujący sposób -
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(TestJunit.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
Teraz uruchom Test Runner, który nie uruchomi żadnego przypadku testowego zdefiniowanego w podanej klasie Test Case.
C:\JUNIT_WORKSPACE>java TestRunner
Sprawdź dane wyjściowe. Żaden przypadek testowy nie jest testowany.
true
JUnit zapewnia przydatną opcję Timeout. Jeśli przypadek testowy trwa dłużej niż określona liczba milisekund, JUnit automatycznie oznaczy go jako zakończony niepowodzeniem. Pliktimeoutparametr jest używany wraz z adnotacją @Test. Zobaczmy, jak działa @Test (timeout).
Utwórz klasę
Utwórz klasę Java do przetestowania, powiedzmy MessageUtil.java w C: \> JUNIT_WORKSPACE.
Dodaj nieskończoną pętlę while wewnątrz metody printMessage ().
/*
* This class prints the given message on console.
*/
public class MessageUtil {
private String message;
//Constructor
//@param message to be printed
public MessageUtil(String message){
this.message = message;
}
// prints the message
public void printMessage(){
System.out.println(message);
while(true);
}
// add "Hi!" to the message
public String salutationMessage(){
message = "Hi!" + message;
System.out.println(message);
return message;
}
}
Utwórz klasę przypadku testowego
Utwórz klasę testową java, powiedzmy, TestJunit.java. Dodaj limit czasu równy 1000 do przypadku testowego testPrintMessage ().
Utwórz plik klasy Java o nazwie TestJunit.java w C: \> JUNIT_WORKSPACE.
import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;
public class TestJunit {
String message = "Robert";
MessageUtil messageUtil = new MessageUtil(message);
@Test(timeout = 1000)
public void testPrintMessage() {
System.out.println("Inside testPrintMessage()");
messageUtil.printMessage();
}
@Test
public void testSalutationMessage() {
System.out.println("Inside testSalutationMessage()");
message = "Hi!" + "Robert";
assertEquals(message,messageUtil.salutationMessage());
}
}
Utwórz testową klasę biegacza
Utwórz plik klasy Java o nazwie TestRunner.java w C: \> JUNIT_WORKSPACE, aby wykonać przypadek testowy.
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(TestJunit.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
Skompiluj klasy MessageUtil, Test case i Test Runner przy użyciu javac.
C:\JUNIT_WORKSPACE>javac MessageUtil.java TestJunit.java TestRunner.java
Teraz uruchom Test Runner, który uruchomi przypadki testowe zdefiniowane w podanej klasie Test Case.
C:\JUNIT_WORKSPACE>java TestRunner
Sprawdź dane wyjściowe. Przypadek testowy testPrintMessage () oznacza, że testy jednostkowe zakończyły się niepowodzeniem.
Inside testPrintMessage()
Robert
Inside testSalutationMessage()
Hi!Robert
testPrintMessage(TestJunit): test timed out after 1000 milliseconds
false
JUnit udostępnia opcję śledzenia obsługi wyjątków kodu. Możesz sprawdzić, czy kod zgłasza żądany wyjątek, czy nie. Plikexpectedparametr jest używany wraz z adnotacją @Test. Zobaczmy @Test (oczekiwany) w akcji.
Utwórz klasę
Utwórz klasę Java do przetestowania, powiedzmy MessageUtil.java w C: \> JUNIT_WORKSPACE.
Dodaj warunek błędu wewnątrz metody printMessage ().
/*
* This class prints the given message on console.
*/
public class MessageUtil {
private String message;
//Constructor
//@param message to be printed
public MessageUtil(String message){
this.message = message;
}
// prints the message
public void printMessage(){
System.out.println(message);
int a = 0;
int b = 1/a;
}
// add "Hi!" to the message
public String salutationMessage(){
message = "Hi!" + message;
System.out.println(message);
return message;
}
}
Utwórz klasę przypadku testowego
Utwórz klasę testową Java o nazwie TestJunit.java. Dodaj oczekiwany wyjątek ArithmeticException do przypadku testowego testPrintMessage ().
Utwórz plik klasy Java o nazwie TestJunit.java w C: \> JUNIT_WORKSPACE.
import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;
public class TestJunit {
String message = "Robert";
MessageUtil messageUtil = new MessageUtil(message);
@Test(expected = ArithmeticException.class)
public void testPrintMessage() {
System.out.println("Inside testPrintMessage()");
messageUtil.printMessage();
}
@Test
public void testSalutationMessage() {
System.out.println("Inside testSalutationMessage()");
message = "Hi!" + "Robert";
assertEquals(message,messageUtil.salutationMessage());
}
}
Utwórz testową klasę biegacza
Utwórz plik klasy Java o nazwie TestRunner.java w C: \> JUNIT_WORKSPACE, aby wykonać przypadek testowy.
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(TestJunit.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
Skompiluj klasy MessageUtil, Test case i Test Runner przy użyciu javac.
C:\JUNIT_WORKSPACE>javac MessageUtil.java TestJunit.java TestRunner.java
Teraz uruchom Test Runner, który uruchomi przypadki testowe zdefiniowane w podanej klasie Test Case.
C:\JUNIT_WORKSPACE>java TestRunner
Sprawdź dane wyjściowe. Przypadek testowy testPrintMessage () zostanie zaliczony.
Inside testPrintMessage()
Robert
Inside testSalutationMessage()
Hi!Robert
true
JUnit 4 wprowadził nową funkcję o nazwie parameterized tests. Testy sparametryzowane pozwalają programistom na wielokrotne uruchamianie tego samego testu przy użyciu różnych wartości. Aby utworzyć sparametryzowany test, należy wykonać pięć kroków.
Opisz klasę testową za pomocą @RunWith (Parameterized.class).
Utwórz publiczną metodę statyczną z adnotacją @Parameters, która zwraca Collection of Objects (as Array) jako zestaw danych testowych.
Utwórz konstruktor publiczny, który pobierze odpowiednik jednego „wiersza” danych testowych.
Utwórz zmienną instancji dla każdej „kolumny” danych testowych.
Utwórz przypadki testowe, używając zmiennych instancji jako źródła danych testowych.
Przypadek testowy zostanie wywołany raz dla każdego wiersza danych. Zobaczmy, jak działają sparametryzowane testy.
Utwórz klasę
Utwórz klasę Java do przetestowania, powiedzmy PrimeNumberChecker.java w C: \> JUNIT_WORKSPACE.
public class PrimeNumberChecker {
public Boolean validate(final Integer primeNumber) {
for (int i = 2; i < (primeNumber / 2); i++) {
if (primeNumber % i == 0) {
return false;
}
}
return true;
}
}
Utwórz sparametryzowaną klasę przypadku testowego
Utwórz klasę testową java, powiedzmy, PrimeNumberCheckerTest.java. Utwórz plik klasy Java o nazwiePrimeNumberCheckerTest.java w C: \> JUNIT_WORKSPACE.
import java.util.Arrays;
import java.util.Collection;
import org.junit.Test;
import org.junit.Before;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import org.junit.runner.RunWith;
import static org.junit.Assert.assertEquals;
@RunWith(Parameterized.class)
public class PrimeNumberCheckerTest {
private Integer inputNumber;
private Boolean expectedResult;
private PrimeNumberChecker primeNumberChecker;
@Before
public void initialize() {
primeNumberChecker = new PrimeNumberChecker();
}
// Each parameter should be placed as an argument here
// Every time runner triggers, it will pass the arguments
// from parameters we defined in primeNumbers() method
public PrimeNumberCheckerTest(Integer inputNumber, Boolean expectedResult) {
this.inputNumber = inputNumber;
this.expectedResult = expectedResult;
}
@Parameterized.Parameters
public static Collection primeNumbers() {
return Arrays.asList(new Object[][] {
{ 2, true },
{ 6, false },
{ 19, true },
{ 22, false },
{ 23, true }
});
}
// This test will run 4 times since we have 5 parameters defined
@Test
public void testPrimeNumberChecker() {
System.out.println("Parameterized Number is : " + inputNumber);
assertEquals(expectedResult,
primeNumberChecker.validate(inputNumber));
}
}
Utwórz testową klasę biegacza
Utwórz plik klasy Java o nazwie TestRunner.java w C: \> JUNIT_WORKSPACE, aby wykonać przypadek testowy.
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(PrimeNumberCheckerTest.class);
for (Failure failure : result.getFailures()) {
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
Skompiluj klasy PrimeNumberChecker, PrimeNumberCheckerTest i Test Runner przy użyciu javac.
C:\JUNIT_WORKSPACE>javac PrimeNumberChecker.java PrimeNumberCheckerTest.java
TestRunner.java
Teraz uruchom Test Runner, który uruchomi przypadki testowe zdefiniowane w podanej klasie Test Case.
C:\JUNIT_WORKSPACE>java TestRunner
Sprawdź dane wyjściowe.
Parameterized Number is : 2
Parameterized Number is : 6
Parameterized Number is : 19
Parameterized Number is : 22
Parameterized Number is : 23
true
Będziemy mieć przykład pokazujący, jak uruchomić JUnit za pomocą ANT. Wykonaj czynności podane poniżej.
Krok 1: Pobierz Apache Ant
Pobierz Apache Ant na podstawie systemu operacyjnego, na którym pracujesz.
OS | Nazwa archiwum |
---|---|
Windows | apache-ant-1.8.4-bin.zip |
Linux | apache-ant-1.8.4-bin.tar.gz |
Prochowiec | apache-ant-1.8.4-bin.tar.gz |
Krok 2: Ustaw środowisko mrówki
Ustaw ANT_HOMEzmienna środowiskowa wskazująca lokalizację katalogu podstawowego, w którym na komputerze są przechowywane biblioteki ANT. Załóżmy, że biblioteki Ant są przechowywane w folderze apache-ant-1.8.4.
Sr.No. | System operacyjny i opis |
---|---|
1 | Windows Ustaw zmienną środowiskową ANT_HOME na C: \ Program Files \ Apache Software Foundation \ apache-ant-1.8.4 |
2 | Linux eksportuj ANT_HOME = /usr/local/apache-ant-1.8.4 |
3 | Mac eksportuj ANT_HOME = /Library/apache-ant-1.8.4 |
Dołącz lokalizację kompilatora Ant do ścieżki systemowej w następujący sposób -
OS | Wynik |
---|---|
Windows | Dołącz ciąg %ANT_HOME\bin na końcu zmiennej systemowej, Path. |
Linux | eksportuj PATH = $PATH:$ANT_HOME / bin / |
Prochowiec | nie wymagane |
Krok 3: Pobierz archiwum JUnit
Pobierz archiwum JUnit, które pasuje do Twojego systemu operacyjnego.
OS | Nazwa archiwum |
---|---|
Windows | junit4.10.jar |
Linux | junit4.10.jar |
Prochowiec | junit4.10.jar |
Krok 4: Utwórz strukturę projektu
Utwórz folder TestJunitWithAnt w C: \> JUNIT_WORKSPACE.
Utwórz folder src w C: \> JUNIT_WORKSPACE> TestJunitWithAnt.
Utwórz folder test w C: \> JUNIT_WORKSPACE> TestJunitWithAnt.
Utwórz folder lib w C: \> JUNIT_WORKSPACE> TestJunitWithAnt.
Stwórz MessageUtil class w C: \> JUNIT_WORKSPACE> TestJunitWithAnt> srcfolder.
/*
* This class prints the given message on console.
*/
public class MessageUtil {
private String message;
//Constructor
//@param message to be printed
public MessageUtil(String message){
this.message = message;
}
// prints the message
public String printMessage(){
System.out.println(message);
return message;
}
// add "Hi!" to the message
public String salutationMessage(){
message = "Hi!" + message;
System.out.println(message);
return message;
}
}
Stwórz TestMessageUtil class w folderze C: \> JUNIT_WORKSPACE> TestJunitWithAnt> src.
import org.junit.Test;
import org.junit.Ignore;
import static org.junit.Assert.assertEquals;
public class TestMessageUtil {
String message = "Robert";
MessageUtil messageUtil = new MessageUtil(message);
@Test
public void testPrintMessage() {
System.out.println("Inside testPrintMessage()");
assertEquals(message,messageUtil.printMessage());
}
@Test
public void testSalutationMessage() {
System.out.println("Inside testSalutationMessage()");
message = "Hi!" + "Robert";
assertEquals(message,messageUtil.salutationMessage());
}
}
Skopiuj junit-4.10.jar do folderu C: \> JUNIT_WORKSPACE> TestJunitWithAnt> lib.
Utwórz plik ANT Build.xml
Będziemy używać <junit> zadanie w Ant, aby wykonać nasze przypadki testowe JUnit.
<project name = "JunitTest" default = "test" basedir = ".">
<property name = "testdir" location = "test" />
<property name = "srcdir" location = "src" />
<property name = "full-compile" value = "true" />
<path id = "classpath.base"/>
<path id = "classpath.test">
<pathelement location = "lib/junit-4.10.jar" />
<pathelement location = "${testdir}" /> <pathelement location = "${srcdir}" />
<path refid = "classpath.base" />
</path>
<target name = "clean" >
<delete verbose = "${full-compile}"> <fileset dir = "${testdir}" includes = "**/*.class" />
</delete>
</target>
<target name = "compile" depends = "clean">
<javac srcdir = "${srcdir}" destdir = "${testdir}"
verbose = "${full-compile}">
<classpath refid = "classpath.test"/>
</javac>
</target>
<target name = "test" depends = "compile">
<junit>
<classpath refid = "classpath.test" />
<formatter type = "brief" usefile = "false" />
<test name = "TestMessageUtil" />
</junit>
</target>
</project>
Uruchom następujące polecenie Ant.
C:\JUNIT_WORKSPACE\TestJunitWithAnt>ant
Sprawdź dane wyjściowe.
Buildfile: C:\JUNIT_WORKSPACE\TestJunitWithAnt\build.xml
clean:
compile:
[javac] Compiling 2 source files to C:\JUNIT_WORKSPACE\TestJunitWithAnt\test
[javac] [parsing started C:\JUNIT_WORKSPACE\TestJunitWithAnt\src\
MessageUtil.java]
[javac] [parsing completed 18ms]
[javac] [parsing started C:\JUNIT_WORKSPACE\TestJunitWithAnt\src\
TestMessageUtil.java]
[javac] [parsing completed 2ms]
[javac] [search path for source files: C:\JUNIT_WORKSPACE\
TestJunitWithAnt\src]
[javac] [loading java\lang\Object.class(java\lang:Object.class)]
[javac] [loading java\lang\String.class(java\lang:String.class)]
[javac] [loading org\junit\Test.class(org\junit:Test.class)]
[javac] [loading org\junit\Ignore.class(org\junit:Ignore.class)]
[javac] [loading org\junit\Assert.class(org\junit:Assert.class)]
[javac] [loading java\lang\annotation\Retention.class
(java\lang\annotation:Retention.class)]
[javac] [loading java\lang\annotation\RetentionPolicy.class
(java\lang\annotation:RetentionPolicy.class)]
[javac] [loading java\lang\annotation\Target.class
(java\lang\annotation:Target.class)]
[javac] [loading java\lang\annotation\ElementType.class
(java\lang\annotation:ElementType.class)]
[javac] [loading java\lang\annotation\Annotation.class
(java\lang\annotation:Annotation.class)]
[javac] [checking MessageUtil]
[javac] [loading java\lang\System.class(java\lang:System.class)]
[javac] [loading java\io\PrintStream.class(java\io:PrintStream.class)]
[javac] [loading java\io\FilterOutputStream.class
(java\io:FilterOutputStream.class)]
[javac] [loading java\io\OutputStream.class(java\io:OutputStream.class)]
[javac] [loading java\lang\StringBuilder.class
(java\lang:StringBuilder.class)]
[javac] [loading java\lang\AbstractStringBuilder.class
(java\lang:AbstractStringBuilder.class)]
[javac] [loading java\lang\CharSequence.class(java\lang:CharSequence.class)]
[javac] [loading java\io\Serializable.class(java\io:Serializable.class)]
[javac] [loading java\lang\Comparable.class(java\lang:Comparable.class)]
[javac] [loading java\lang\StringBuffer.class(java\lang:StringBuffer.class)]
[javac] [wrote C:\JUNIT_WORKSPACE\TestJunitWithAnt\test\MessageUtil.class]
[javac] [checking TestMessageUtil]
[javac] [wrote C:\JUNIT_WORKSPACE\TestJunitWithAnt\test\TestMessageUtil.class]
[javac] [total 281ms]
test:
[junit] Testsuite: TestMessageUtil
[junit] Tests run: 2, Failures: 0, Errors: 0, Time elapsed: 0.008 sec
[junit]
[junit] ------------- Standard Output ---------------
[junit] Inside testPrintMessage()
[junit] Robert
[junit] Inside testSalutationMessage()
[junit] Hi!Robert
[junit] ------------- ---------------- ---------------
BUILD SUCCESSFUL
Total time: 0 seconds
Aby skonfigurować JUnit z eclipse, wykonaj kroki podane poniżej.
Krok 1: Pobierz archiwum JUnit
Pobierz plik JUnit oparty na systemie operacyjnym, który masz w swoim systemie.
OS | Nazwa archiwum |
---|---|
Windows | junit4.10.jar |
Linux | junit4.10.jar |
Prochowiec | junit4.10.jar |
Załóżmy, że skopiowałeś powyższy plik JAR do folderu C: \> JUnit.
Krok 2: Ustaw środowisko Eclipse
Otwórz eclipse → kliknij prawym przyciskiem myszy projekt i kliknij właściwość> Build Path> Configure Build Path i dodaj junit-4.10.jar do bibliotek za pomocą przycisku Add External Jar.
Zakładamy, że Twój Eclipse ma wbudowaną wtyczkę JUnit. Jeśli nie jest dostępny w katalogu C: \> eclipse \ plugins, możesz go pobrać zJUnit Plugin. Rozpakuj pobrany plik zip w folderze wtyczek Eclipse. Na koniec uruchom ponownie Eclipse.
Teraz Twój Eclipse jest gotowy do tworzenia przypadków testowych JUnit.
Krok 3: Zweryfikuj instalację JUnit w Eclipse
Utwórz projekt TestJunitw Eclipse w dowolnym miejscu. Następnie utwórz klasęMessageUtil do przetestowania w projekcie.
/*
* This class prints the given message on console.
*/
public class MessageUtil {
private String message;
//Constructor
//@param message to be printed
public MessageUtil(String message){
this.message = message;
}
// prints the message
public String printMessage(){
System.out.println(message);
return message;
}
}
Utwórz klasę testową TestJunit w projekcie.
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class TestJunit {
String message = "Hello World";
MessageUtil messageUtil = new MessageUtil(message);
@Test
public void testPrintMessage() {
assertEquals(message,messageUtil.printMessage());
}
}
Poniżej powinna być struktura projektu -
Na koniec kliknij program prawym przyciskiem myszy i uruchom jako JUnit, aby zweryfikować dane wyjściowe programu.
Sprawdź wynik.
Poniżej znajdują się rozszerzenia JUnit -
- Cactus
- JWebUnit
- XMLUnit
- MockObject
Kaktus
Cactus to prosta struktura testowa do testowania jednostkowego kodu Java po stronie serwera (serwlety, EJB, tagi, filtry). Celem Cactus jest obniżenie kosztów pisania testów dla kodu po stronie serwera. Używa JUnit i rozszerza go. Cactus implementuje strategię w kontenerze, która wykonuje testy wewnątrz kontenera.
Ekosystem kaktusa składa się z kilku elementów -
Cactus Frameworkjest sercem Cactus. Jest to silnik, który zapewnia API do pisania testów Cactus.
Cactus Integration Modules to front-endy i frameworki, które zapewniają łatwe sposoby używania Cactus Framework (skrypty Ant, wtyczka Eclipse i wtyczka Maven).
Poniższy kod ilustruje, jak można użyć Cactus.
import org.apache.cactus.*;
import junit.framework.*;
public class TestSampleServlet extends ServletTestCase {
@Test
public void testServlet() {
// Initialize class to test
SampleServlet servlet = new SampleServlet();
// Set a variable in session as the doSomething()
// method that we are testing
session.setAttribute("name", "value");
// Call the method to test, passing an
// HttpServletRequest object (for example)
String result = servlet.doSomething(request);
// Perform verification that test was successful
assertEquals("something", result);
assertEquals("otherValue", session.getAttribute("otherName"));
}
}
JWebUnit
JWebUnit to oparty na języku Java framework do testowania aplikacji internetowych. Obejmuje istniejące struktury testowe, takie jak HtmlUnit i Selenium, z ujednoliconym, prostym interfejsem testowym do testowania poprawności aplikacji internetowych.
JWebUnit zapewnia wysokopoziomowy interfejs API języka Java do nawigacji w aplikacji internetowej w połączeniu z zestawem asercji w celu weryfikacji poprawności aplikacji. Obejmuje to nawigację za pomocą łączy, wprowadzanie i przesyłanie formularzy, sprawdzanie zawartości tabel i inne typowe funkcje aplikacji internetowych dla firm.
Proste metody nawigacji i gotowe do użycia asercje pozwalają na szybsze tworzenie testów niż używanie tylko JUnit lub HtmlUnit. A jeśli chcesz przełączyć się z HtmlUnit na inne wtyczki, takie jak Selenium (dostępne wkrótce), nie ma potrzeby przepisywania testów.
Oto przykładowy kod.
import junit.framework.TestCase;
import net.sourceforge.jwebunit.WebTester;
public class ExampleWebTestCase extends TestCase {
private WebTester tester;
public ExampleWebTestCase(String name) {
super(name);
tester = new WebTester();
}
//set base url
public void setUp() throws Exception {
getTestContext().setBaseUrl("http://myserver:8080/myapp");
}
// test base info
@Test
public void testInfoPage() {
beginAt("/info.html");
}
}
XMLUnit
XMLUnit udostępnia pojedynczą klasę rozszerzenia JUnit, XMLTestCase i zestaw klas pomocniczych, które umożliwiają tworzenie asercji dotyczących -
Różnice między dwoma fragmentami XML (poprzez klasy Diff i DetailedDiff).
Ważność fragmentu XML (poprzez klasę Validator).
Wynik przekształcenia fragmentu XML za pomocą XSLT (za pośrednictwem klasy Transform).
Ocena wyrażenia XPath na fragmencie XML (za pośrednictwem klas implementujących interfejs XpathEngine).
Poszczególne węzły w kawałku XML, które są ujawniane przez DOM Traversal (za pośrednictwem klasy NodeTest).
Załóżmy, że mamy dwa fragmenty XML, które chcemy porównać i stwierdzić, że są równe. Moglibyśmy napisać taką prostą klasę testową -
import org.custommonkey.xmlunit.XMLTestCase;
public class MyXMLTestCase extends XMLTestCase {
// this test method compare two pieces of the XML
@Test
public void testForXMLEquality() throws Exception {
String myControlXML = "<msg><uuid>0x00435A8C</uuid></msg>";
String myTestXML = "<msg><localId>2376</localId></msg>";
assertXMLEqual("Comparing test xml to control xml", myControlXML, myTestXML);
}
}
MockObject
W teście jednostkowym pozorowane obiekty mogą symulować zachowanie złożonych, rzeczywistych (nie-pozorowanych) obiektów i dlatego są przydatne, gdy rzeczywisty obiekt jest niepraktyczny lub niemożliwy do włączenia do testu jednostkowego.
Typowy styl kodowania do testowania przy użyciu pozorowanych obiektów to -
- Twórz instancje pozorowanych obiektów.
- Ustaw stan i oczekiwania w obiektach pozornych.
- Wywołaj kod domeny z pozorowanymi obiektami jako parametrami.
- Sprawdź spójność w obiektach pozorowanych.
Poniżej podano przykład MockObject przy użyciu Jmocka.
import org.jmock.Mockery;
import org.jmock.Expectations;
class PubTest extends TestCase {
Mockery context = new Mockery();
public void testSubReceivesMessage() {
// set up
final Sub sub = context.mock(Sub.class);
Pub pub = new Pub();
pub.add(sub);
final String message = "message";
// expectations
context.checking(new Expectations() {
oneOf (sub).receive(message);
});
// execute
pub.publish(message);
// verify
context.assertIsSatisfied();
}
}