Unit Test mit Spring Boot - Service Autowired

bueseb84

Mitglied
Hallo in die Runde .

Ich habe folgendes Projekt :

Java:
@Service
@Slf4j
public class MatchBuilder implements IMatchBuilder {

    @Autowired
    ModelRepository modelRepository;
    ...

Java:
@Service
@Slf4j
public class ModelRepository implements IModelRepository {

...

Also ich habe einen MatchBuilder, der eine Repository beinhaltet. Nun möchte ich gerne den MatcBuilder in einem Unit / Integrationtest testen.

hier mein Test Code :
Java:
@SpringBootTest
public class integrationTest {

    @Autowired
    MatchBuilder matchBuilder;

    @Test
    public void testmatchBuilder() {
        assertNotNull(matchBuilder);
    }
}

Allerdings ist das matchBuilder Objekt in diesem Fall NULL. Irgendwas habe ich bei der Initialisierung vergssen. KAnn mir bitt jemand helfen ?
 
Die Integrationstests müssen einen Container starten, um die Testfälle auszuführen. Dafür sind einige zusätzliche Einstellungen erforderlich, z.B.:
Java:
@RunWith(SpringRunner.class)
@SpringBootTest(
  SpringBootTest.WebEnvironment.MOCK,
  classes = Application.class)
@AutoConfigureMockMvc
@TestPropertySource(
  locations = "classpath:integrationtest.properties")
...
 
Die Integrationstests müssen einen Container starten, um die Testfälle auszuführen. Dafür sind einige zusätzliche Einstellungen erforderlich, z.B.:
@SpringBootTest reicht im Normalfall für Integrationstests, den Rest braucht man nur, wenn man mit den Default-Einstellungen nicht zufrieden ist (bzw @RunWith(SpringRunner.class) nur mit Junit 4)
 
Drei kurze Anmerkungen:

- Der I-Präfix ist in Java ungewöhnlich, das würde ich weglassen. Und dann die Klasse MatchBuilder so benennen, nach dem wie sie konkret die Schnittstelle implementiert, also wie AiMatchBuilder, RulesMatchBuilder, ...
- Field-Injection ist im Allgemeinen nicht gerne gesehen, besser Konstruktor-Injection
- @SpringBootTest ist für Integrationstests der richtige Weg, aber das ist relativ teuer. Für Komponententests würde ich das vermeiden und die Injizierung von Hand vornehmen und den Spring-Container gar nicht hochfahren. @mock ist auch hier dein Freund.
 

Zurück
Oben