PV168/JUnit v IntelliJ IDEA: Porovnání verzí

Z FI WIKI
Přejít na: navigace, hledání
m
Řádka 1: Řádka 1:
Tato stránka obsahuje stručný návod jako používat JUnit v IntelliJ IDEA 15.
+
Tato stránka obsahuje stručný návod jako používat JUnit v IntelliJ IDEA.
 
+
== Příprava ==
+
  
 
Nejdřív je třeba přidat knihovnu pro JUnit.  
 
Nejdřív je třeba přidat knihovnu pro JUnit.  

Verze z 7. 3. 2017, 23:20

Tato stránka obsahuje stručný návod jako používat JUnit v IntelliJ IDEA.

Nejdřív je třeba přidat knihovnu pro JUnit.

Nejjednodušší u nového projektu je vytvořit noý projekt typu Maven a přidat do něj závislost na JUnit. Tedy v menu zvolit File - New project - Maven.

V otevřeném soboru pom.xml zmáčknout Alt+Insert, vybrat Dependency, najít v seznamu junit a potvrdit. Do pom.xml se přidá text, do něj je vhodné doplnit <scope>test</scope>, takže celkově se do pom.xml přidá:

 
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

Pokud nechceme vytvářet nový projekt typu Maven, pak v následujícím kroku zobrazí IDEA varování "JUnit is not available" a vedle něj tlačítko Fix, které když zmáčkneme, IDEA sama přidá knihovnu JUnit do projektu.

Testované třídy a vygenerování testů

Projekt pro Maven má automaticky vytvořené adresáře src/main/java pro třídy a src/test/java pro unit testy.

Mějme tedy například třídu Car, interface CarManager a jeho implementaci CarManagerImpl. Pokud umístíme kurzor na řádek s definicí třídy, tj.

 
public class Car {
 
    private long id;
    private String name;
 
    public Car() {
    }
 
    public long getId() {
        return id;
    }
 
    public void setId(long id) {
        this.id = id;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
}
 
import java.util.List;
 
public interface CarManager {
 
    Car createCar(Car car);
 
    List<Car> findAllCars();
 
}
 
import java.util.List;
 
public class CarManagerImpl implements CarManager {
 
    @Override
    public Car createCar(Car car) {
        return car;
    }
 
    @Override
    public List<Car> findAllCars() {
        return null;
    }
}

a zmáčkneme Alt+Enter (vyvolání tzv. Intention Action), nabídne se nám akce Create test. Po zvolení této akce se objevi dialogové okno, ve kterém zvolíme parametry generovaného testu, např. zvolíme Test Library: JUnit 4, že chceme generovat @Before a pro které metody chceme test. Vygeneruje se třída, která vypadá nějak takto:

 
package cz.muni.fi.pv168;
 
import org.junit.Before;
import org.junit.Test;
 
public class CarManagerImplTest {
    
    @Before
    public void setUp() throws Exception {
 
    }
 
    @Test
    public void testCreateCar() throws Exception {
 
    }
}

Implementace testů

Do metody naimplementujte testy, např.

 
package cz.muni.fi.pv168;
 
import org.junit.Before;
import org.junit.Test;
 
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.fail;
 
public class CarManagerImplTest {
 
    CarManagerImpl carManager;
 
    @Before
    public void setUp() throws Exception {
        carManager = new CarManagerImpl();
    }
 
    @Test
    public void testCreateCarWithNull() throws Exception {
        try {
            carManager.createCar(null);
            fail("nevyhodil NullPointerException pro prazdny vstup");
        } catch (NullPointerException ex) {
        }
    }
 
    @Test
    public void testCreateCarWithId() throws Exception {
        Car car = new Car();
        car.setName("Škodovka");
        Car car2 = carManager.createCar(car);
        assertThat(car2.getId(), is(not(equalTo(0l))));
    }
 
    @Test
    public void testCreateCarCanBeRetrieved() throws Exception {
        Car car = new Car();
        car.setName("Škodovka");
        Car car2 = carManager.createCar(car);
        assertThat(carManager.findAllCars(), hasItem(car2));
    }
}

Při psaní testů můžete používat buď starší přístup s metodou assertTrue(), nebo modernější přístup s assertThat(), který je o něco čtivější a umožňuje generovat automaticky lepší chybová hlášení.

Spuštění testů

Spuštění s grafickým rozhraním v IntelliJ IDEA

Pravým tlačítkem klikneme na adresář src/test/java a vybereme Create All Tests. Tím se vytvoří položka pro spouštění testů.

Kliknutím na zelenou šipku, případně zmáčknutím Shfit+F10 testy spustíme.

Pokud bude nějaký test neúspěšný, zobrazí se chybová hlášení:

Junit idea fail.png

Naopak pokud budou všechny testy úspěšné, zobrazí se jen potvrzení úspěchu:

Junit idea success.png

Spuštění v Mavenu z příkazového řádku

Unit testy nemusíme spouštět jen z vývojového prostředí. Díky tomu, že máme projekt ve formátu pro Maven, můžeme spustit testy i Mavenem.

Nejřív ale musíme do popisu projektu v souboru pom.xml přidat tyto řádky:

 
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>
    <build>
        <plugins>
            <!-- Java language version -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

Těmi říkáme, že naše zdrojové kódy jsou v kódování UTF-8, a že používáme verzi jazyka Java 8.

Testy pak spustíte z příkazového řádku v adresáři projektu příkazy:

module add jdk-1.8.0
module add maven
mvn clean
mvn test

Příkaz module add maven-loc přidá do cesty program Maven. Příkaz mvn clean smaže adresář target, čímž smaže všechny zkompilované třídy a uvede projekt do čistého stavu. Příkaz mvn test pak projekt znovu zkompiluje a spustí testy.