Spring-Boot Kitchen

Allgemein

...
...

Environment

Environment injecten

@Autowired

Environment env

Property aus Environment lesen

String property = env.getProperty("[prop-name]");

prop-name: zb. Eintrag aus application.properties


JPA

Immer 'JpaRepository' iplemnetieren/extenden, weil es im Gegenstaz zu CrudRepository weitere Methoden wie 'safeAndFlush etc. bietet.'

@Repository

public interface UserRepository extends JpaRepository<T, €> implements Repo { ...

T = [Entity] Die Persistiert werden soll

E = [ID-Class] Typ der ID, die verwendet wird (Integer, Long, Bean etc.)

[Other]Repository Ein weitere Repository, das ggf. implementiert werden muss

ManyToMany mit Join Table
Besitzende Seite Enthält die Angaben zur Tabelle in der A zu B per ID gemappt werden, FetchType.EAGER ist erforderlich.

@ManyToMany(fetch = FetchType.EAGER)

@JoinTable(

name = "[a-side_b-side]",

joinColumns = { @JoinColumn(name = "a-side_id") },

inverseJoinColumns = { @JoinColumn(name = "b-side_id") }

)

Besessene Seite Enthält die Mapping-Information für die Gegenseite, FetchType.EAGER ist erforderlich.

@ManyToMany(mappedBy = "[Feld in Gegenseite]", fetch = FetchType.EAGER )


TEST

Einen Test mit Startparametern ausführen

@SpringBootTest(args = {"[arg 0]", "[arg 1]", "[arg 2]" ... etc. })

class MeineTestKlasse{

... fabulous code goes here

}

Environment in einen Test injecten und Properties auslesen

@Test

void test(@Autowired Environment env) {

String property = env.getProperty("[prop zb. aus application.properties]");

}

Parametrisierte Tests Integer mit Junit-Jupiter

@ParameterizedTest

@ValueSource(ints = {1, 2, 3})

void test_int_arrays(int arg) {

assertTrue(arg > 0);

}

Parametrisierte Tests mit bestimmten Wert

@ParameterizedTest (name = "#{index} - Run test with args={0}")

@ValueSource(ints = {1, 2, 3})

void test_int_arrays(int arg) {

assertTrue(arg > 0);

}

Parametrisierte Tests mit Strings

@ParameterizedTest (name = "#{index} - Run test with args={0}")

@ValueSource(strings = {"apple", "banana", "orange"})

void test_int_arrays(String arg) {

assertTrue(arg > 0);

}


Top 10 Errors

Test startet nicht:

Du hast die Test-Klasse nicht mit @SpringBootTest annotiert

Rest Controller Test startet nicht:

Die richtige Annotation: @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)

Thymeleaf Seite wird nicht ausgeliefert:

Du hast die Klasse mit @RestController statt mit @Controller annotiert