Database
 sql >> Baza danych >  >> RDS >> Database

Odkrywanie testów jednostkowych Java za pomocą JUnit Test Framework

JUnit to zewnętrzna platforma testowania jednostkowego o otwartym kodzie źródłowym. Projekt został zapoczątkowany przez Kenta Becka i Ericha Gammę pod koniec 1995 roku. Szybko zainteresował się społecznością programistów, którzy w szczególności zajmują się rozwojem opartym na testach. JUnit został początkowo wprowadzony do Smalltalk, ale później został przeniesiony do Javy, która szybko przyjęła to jako de facto standard testów jednostkowych. Popularność JUnit wzrosła do tego stopnia, że ​​w celu zaspokojenia potrzeb wielu innych współczesnych języków, takich jak C#, Perl, Python, PHP, Ruby, Visual Basic, C++ itd., opracowano ogólny framework xUnit, w którym litera „x” jest zastępowane przez pierwszą literę języka, taką jak JUnit dla Javy, RUnit dla Ruby i tak dalej. Ten artykuł zawiera przegląd tego frameworka używanego przez de facto standard testów jednostkowych Java.

Przegląd testów

Testowanie to ważna faza cyklu życia tworzenia aplikacji. Głównym celem testowania jest ocena programu na podstawie wymaganych specyfikacji. Celem jest stworzenie określonych przypadków testowych, które w jak największym stopniu uwypuklają błędy, luki, wszelkie rozbieżności lub nieoczekiwane wyniki. Ta prosta koncepcja wiąże się z pewnymi skomplikowanymi procesami. Ale krótko mówiąc, odbywa się to na trzech poziomach. Gdy testowanie odbywa się na bardzo szczegółowym lub indywidualnym poziomie komponentu, nazywa się to testowaniem jednostkowym; gdy są one łączone w celu sprawdzenia interfejsów między komponentami w stosunku do projektu oprogramowania, nazywa się to testowaniem integracyjnym; i wreszcie, gdy cały system jest zintegrowany i przeprowadzane są testy w celu sprawdzenia, czy system jako całość spełnia określone wymagania, nazywa się to Testowaniem systemu .

Testowanie jednostkowe

Krótko mówiąc, wykonanie testu jednostkowego jest sposobem na zbadanie zachowania odrębnej jednostki kodu. W Javie jednostka kodu może oznaczać metodę lub klasę, a nawet moduł, w zależności od kontekstu. Jeśli jest to na przykład metoda, test koncentruje się na ocenie właściwego odwołania do obiektu, które może wywołać metodę, typu parametrów i dopuszczalnych wartości, zakresów wartości pierwotnych, typu i wartości zwracanej, i tak dalej. Chodzi o to, aby metoda była na tyle solidna, aby mogła z wdziękiem poradzić sobie z problemem i odrzucić te, które wykraczają poza jego zakres, poza wypełnieniem umowy.

Dlatego testowanie jednostkowe stanowi podstawowy element składowy każdej oceny programu. W rzeczywistości każdy programista przeprowadza pewnego rodzaju testy jednostkowe, gdy pisze kod, aby sprawdzić wynik kodu z pewnymi fikcyjnymi danymi/przypadkami. Testowanie jednostkowe jest zatem formalnym statusem nadanym tej izolowanej kolekcji testów. Niezwykle ważne jest, aby kod przechodził rygor różnych faz testowania. Testowanie jednostkowe, poza swoim znaczeniem, jest również bardzo powszechne. Ludzie tacy jak Kent Beck i Erich Gamma myśleli o stworzeniu dla niego ram, aby programiści otrzymali ustrukturyzowane środowisko i mogli zautomatyzować wiele z tych zadań. W końcu do tego służą ramy. Zazwyczaj zapewnia spójną strukturę programu, którą można wielokrotnie wykorzystywać i udostępniać w różnych aplikacjach. Programista może włączyć je do istniejącej aplikacji i rozszerzyć zgodnie ze swoimi potrzebami.

Szybki przykład

Prosty kod testu jednostkowego do zbadania pojedynczej metody w Temperatura klasa bez użycia frameworka JUnit jest następująca:

package org.mano.unittest.examples;
public class Circle {
   double area(double radius) {
      returnMath.PI* radius * radius;
   }
}

Teraz napiszmy kod do testów jednostkowych obszaru metoda.

package org.mano.unittest.examples;

public class CircleTest {
   public int errCounter= 0;
   public void testCircleArea() {
      Circle circle = new Circle();
      double area = circle.area(12);
      if (area < 452 && area > 453) {
         throw new IllegalStateException("Wrong calculation!: "
            + area);
      }
   }

   public static void main(String[] args) {
      TestCircle test = new TestCircle();
      try {
         test.testCircleArea();
      } catch (Throwable e) {
         test.errCounter++;
         e.printStackTrace();
      }
      if (test.errCounter> 0) {
         throw new IllegalStateException("There were "
            + test.errCounter+ " error(s)");
      }
   }
}

To jest szczątkowy przykład, ale daje wyobrażenie o tym, jak można przeprowadzić testowanie jednostkowe bez użycia jakiegokolwiek frameworka.

Struktura testowa JUnit

Używanie frameworka JUnit do testów jednostkowych ma kilka zalet. Zawiera liczne adnotacje, które ułatwiają pisanie i uruchamianie kodów testowych w Javie:

  • Przede wszystkim oddziela problem testowania jednostkowego od rzeczywistego kodu projektu, umożliwiając utworzenie instancji klasy testowej i programów ładujących klasy dla każdego testu jednostkowego. Są one „odporne” na istniejący kod przed niepotrzebnymi skutkami ubocznymi testów.
  • Adnotacje dostarczane przez JUnit, takie jak @Before, @After, @BeforeClass, @AfterClass — mieć metody zarówno inicjowania zasobów, jak i odzyskiwania zasobów.
  • Istnieje wiele różnych metod asercji do weryfikacji wyniku testu.
  • Z biegiem lat JUnit stał się tak popularny, że liczne narzędzia Java, takie jak Ant i Maven; i popularne IDE, takie jak Eclipse , NetBeans , InteliJ POMYSŁ , i tym podobne, ma wbudowaną integrację JUnit.

Aby użyć JUnit Test Framework w projekcie Java, należy dodać plik JUnit JAR do ścieżki klasy projektu. Jest to wyraźnie wymagane, jeśli IDE nie jest zintegrowane z biblioteką JUnit. Proces jest prosty. Pobierz plik JAR i dodaj go do ścieżki klasy projektu.

Oto kilka ważnych linków do frameworka JUnit.

  • JUnit Oficjalna strona
  • JUnit Java API
  • Podręcznik użytkownika JUnit
  • Kod źródłowy JUnit w GitHub

W przeciwieństwie do JUnit 4 i jego poprzedników, JUnit 5 wprowadził kilka istotnych zmian. Oprócz wielu nowych funkcji dodanych &mdahs; takich jak obsługa lambda, nowe adnotacje i wstrzykiwanie parametrów metody testowej — architektura rdzenia została znacznie zmodyfikowana. JUnit 5 jest teraz złożoną architekturą trzech różnych modułów:JUnit Jupiter, JUnit Vintage i JUnit Platform. Twórcy przypadków testowych nie muszą jednak przejmować się zawiłościami zmian. Zmiany oznaczają przede wszystkim lepszą obsługę narzędzi, spójność i czystsze interfejsy API. Przede wszystkim jest całkowicie wstecznie kompatybilny z JUnit 4. Więc nie ma tu żadnych obaw. Więcej informacji można znaleźć w instrukcji obsługi JUnit 5.

Szybki przykład

Oto bardzo prosty przykład, aby rzucić okiem na to, jak można wykonać testy jednostkowe za pomocą frameworka JUnit. Korzystamy z Pracownika dla testu jednostkowego i utwórz klasę testową, aby dać wyobrażenie o jej działaniu. Przykład jest szczątkowy w zakresie pisania programu „Hello World”. Rzeczywiste przypadki testowe, a nawet przyzwoity przykład testu jednostkowego, wymagają sporej ilości kodu. Może spróbujemy tego w innym artykule.

package org.mano.unittest.examples;
public class Employee {
   private final String name;
   private final double basicPay;
   public Employee(String name, double basicPay) {
      this.name=name;
      this.basicPay=basicPay;
   }
   public String getName() {
      return name;
   }
   public double getBasicPay() {
      return basicPay;
   }
}

package org.mano.unittest.examples;
import org.junit.Test;
import static org.junit.Assert.*;
public class EmployeeTest {
   @Test
   public void constructorInitTest(){
      Employee emp=new Employee("Odin", 2300);
      assertEquals("Odin", emp.getName());
      assertEquals(2300, emp.getBasicPay(), 0.001);
   }
}

package org.mano.unittest.examples;
public class EmployeeTestMain {
   public static void main(String[] args){
      EmployeeTest et=new EmployeeTest();
      et.constructorInitTest();
   }
}

Zauważ, że klasa Employee jest niezmienna i zawiera tylko dwa pola ustawione przez konstruktora. Ponieważ tylko metoda konstruktora jest warta przetestowania, przetestujemy tylko to.

Klasa testowa nosi nazwę EmployeeTest zgodnie z konwencją. Adnotacja @Test umożliwia JUnit wyznaczenie metody jako metody testowej. W Assercie znajduje się wiele różnych metod asercji klasa. Tutaj użyliśmy tylko assertEquals .

Istnieje wiele sposobów na uruchomienie testu napisanego w JUnit. Zazwyczaj po uruchomieniu przypadków testowych drukuje podsumowanie. Może się jednak różnić w zależności od sposobu przeprowadzenia testu. Może działać przez IDE, takie jak Eclipse lub IntelliJ, lub narzędzia takie jak Maven, Gradle i tak dalej. Czasami jedyną informacją otrzymaną po teście jest to, że test się nie powiódł lub zdał.

Wniosek

Istnieje kilka innych frameworków do testowania jednostkowego. JUnit to popularna platforma testów jednostkowych wśród społeczności Java. Testowanie jako faza inżynierii systemu obejmuje znacznie więcej procesów. Testy jednostkowe to tylko część tego i, co ciekawe, wiele testów gry wykonywanych przez dewelopera można nazwać testami jednostkowymi. JUnit, jako framework testowy, dodaje do niego wartość. Adnotacje i interfejsy API dostarczane przez JUnit automatyzują wiele zadań i znacznie ułatwiają życie programistom testów jednostkowych.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Używanie strace jako narzędzia do debugowania DG40DBC w systemie Linux

  2. Model bazy danych dla systemu komunikacyjnego

  3. Jak uruchamiają się plany równoległe – część 5

  4. Model danych agencji nieruchomości

  5. Błąd ORA-65048 podczas zmiany hasła użytkownika w bazie danych kontenerów (CDB)