Skip to content
stepanekp edited this page May 20, 2023 · 4 revisions

Jednotkové testy

Důležité dependency pro JUnit 5 testy.

<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-launcher</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
<scope>test</scope>
</dependency>

V této verzi přechod od "org.junit.Test" a "org.junit.jupiter.api.Before" na nové "org.junit.jupiter.api.Test" a "org.junit.jupiter.api.BeforeEach". Díky tomu zde už není problém v různých typech testů. Potřeba si to hlídat.

Kontraktové testy

V pom.xml byla přidána dependenci:

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-contract-verifier</artifactId>
<version>2.1.1.RELEASE</version>
<scope>test</scope>
</dependency>

a plugin na kontraktové testy:

<plugin>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-contract-maven-plugin</artifactId>
<version>3.0.3</version>
<extensions>true</extensions>
<configuration>
<testFramework>JUNIT5</testFramework>
<baseClassForTests>
"třída, mokojící vše potřebné pro testy"
</baseClassForTests>
</configuration>
</plugin>

Byl zde problém s verzemi -> dávat si na to pozor.

Pro definici testu je používat skript v .groovy. Ve scriptu se definuje Http request, který chceme posílat, a response, kterou očekáváme na daný request. Dále je možné definovat nějaký popis kontraktu.

Pro úvodní konfiguraci byla vytvořena třída BaseTest (src/test/java/v2/controler). Zde se musí namokovat služby, které nejsou přímo v testované aplikaci -> databáze, oauth, atd. Dále se vytvoří přes "@Autowired" kontext celé aplikace skrze třídu "WebApplicationContext". Před každým testem se pak musí nadefinovat co se má stát, když se volá namokovaná služba.

Pro vygenerování testů se musí rozbalit "Maven" menu po pravé straně ide. Tam v SPADe záložce se rozbalí "LifeCycle" záložka. Zde se musí spustit dva příkazy v daném pořadí:

  1. "clean" - smaže všechny původní testy -> tím uvolní místo pro nové
  2. "test" - vygeneruje a spustí všechny dostupné testy (jednotkové i kontraktové)

Registrační kontrakt

  • uživatel má jedinečné jméno, správný email a heslo -> bude zaregistrován (zpráva: "User successfully created", status: 201)
  • uživatelské jméno už je používáno někým jiným -> uživateli je řečeno, že nemůže zaregistrovat (zpráva: "User exists", status: 400)

Přihlašovací kontrakt

  • uživatel je registrovaný a má správné heslo -> bude přihlášen (zpráva: "User logged in successfully", status: 200, token: "token")
  • uživatel není registrovaný -> není přihlášen a dostane obecnou zprávu (zpráva: "User login failed", status: 401)
  • uživatel je registrovaný, ale zadal chybné heslo -> není přihlášen a dostane obecnou zprávu (zpráva: "User login failed", status: 401)

Odhlašovací kontrakt

  • přihlášený uživatel se chce odhlásit -> uživatel je odhlášen (zpráva: "User logged out", status: 200)

About kontrakt

  • GET metoda -> vrátí informace o aplikaci (pole dat o verzích, status: 200)

Konfigurační kontrakt

  • uživatel po přihlášení uvidí všechny své konfigurace -> dostane seznam konfigurací, které se mu zobrazí(zpráva: ok, "configuration_ids": pole ID konfigurací, "configuration_names": pole názvů kofigurací, status: 200)
  • uživatel chce vidět hodnoty aktuální konfigurace -> dostane celou konfiguraci (zpráva: "configuration retrived", "configurations": konfugurace, status: 200)

Detection kontrakt

  • uživatel vejde na stránku "Detection" -> GET metoda, potřebuje seznam projektů a anti vzorů ("antiPatterns": [pole anti vzorů], "projects": [pole projektů], status: 200)
  • uživatel vybere projekty, nad kterými chce provádět detekcti vybraných anti vzorů -> po stisknutí tlačítka "Detect" se vrátí tabulka s detekcemi ([pole projektů s výsledky všech anti vzorů na projektu], status: 200)

Clone this wiki locally