Spring Test findet Component nicht

8u3631984

Bekanntes Mitglied
Hallo zusammen,
ich habe ein Spring Boot Projekt wo ich gerne meine Components testen möchte. Hier mein Code :

[CODE lang="java" title="Hier die Problem Stelle"]@SpringBootTest(classes = TestApplication.class)
@Slf4j
public class CSVParserTest {

@Autowired
CSVParser csvParser;

@Test
@DisplayName("start csv parser")
public void startCSVParser() {

assertNotNull(csvParser);
}

}[/CODE]
Der Test liegt unter folgendem Package : manager.factory

Ein weiterer Test :
Java:
@SpringBootTest(classes = TestApplication.class)
@Slf4j
public class FactoryTest {

    @Autowired
    Factory factory;

    @Autowired
    Repository repository;

    @ParameterizedTest
    @MethodSource("TestParameter#getValidMatchData")
    @DisplayName("build and save match object with valid match data")
    @Transactional
    public void buildAndSaveMatchObjectWithValidParserResult(IParserResult parserResult) {
        assertNotNull(factory);

        Optional<Match> match = factory.buildAndSaveMatchObject(parserResult);
        assertTrue(match.isPresent());
....


Nun meine Frage das CSVParser Objekt wird nicht gefunden, das Factory Objekt schon. Und ich finde nicht die Stelle wo das Problem liegt.

Hier die Klassen :
Java:
@Component
@Slf4j
public class CSVParser implements IParser {
   
    ..

Java:
@Component
@Slf4j
public class Factory  implements IModelFactory {

Und hier die testApplication :

Java:
@SpringBootApplication
@EntityScan(basePackages = {"model"})
@EnableJpaRepositories(basePackages = {"repository"})
@ComponentScan(basePackages = {"manager.factory", "repository"})
public class TestApplication {

    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class, args);
    }
}

Kann mir jemand einen Tipp geben ?
 
In welchen Paackages liegt was?

CSVParser wird nur gefunden, wenn er unterhalb von manager.factory oder repository liegt.

Ich würde meine Anwendung versuchen so zu bauen, dass ich auf die ganzen Angaben der basePackages verzichten kann, im Sinne von Convention over Configuration.

Sprich, das ein Paket gibt was als root für deine Anwendung gilt (da nimmt ja eh in der Regel Domains) und alles andere darunter - dann kannst du dir diese Annotationen sparen und es reicht die SpringBootApplication als Annotation
 
Hallo und danke für deine Antwort.

Ich habe nun folgendes in meine Testklasse eingefügt :
Java:
@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestApplication.class)
@Slf4j
public class CSVParserTest {

    @Autowired
    CSVParser csvParser;

    @Test
    @DisplayName("start csv parser")
    public void startCSVParser() {
        assertNotNull(csvParser);
    }

}

Allerdings verstehe ich es nicht ganz warum die Zeile mit dem RundWith notwendig ist um den Spring Context hochzufahren.

Auf jeden Fall geht es damit
 
Richtig, das kam durch eine zu alte Spring Boot Variant mit. Mit dem Update auf 2.4.2 ist das Problem gelöst.

Vielen Dank für die Mithilfe !!!
 

Zurück
Oben