Ich möchte eine @ Service-Klasse testen, die normalerweise mit SpringApplication.run() aufgerufen wird.Testen von Spring-Boot @ Service Klasse
Die Service-Klasse ist:
@Service
@EnableConfigurationProperties(AppProperties.class)
public class MongoService {
private static final Logger logger = LoggerFactory.getLogger(MongoService.class);
private MongoClient mongoClient;
private final AppProperties properties;
@Autowired
public MongoService(AppProperties properties) {
this.properties = properties;
}
/**
* Open connection
*/
public void openConnection() {
try {
mongoClient = new MongoClient(new MongoClientURI(properties.getMongoConnectionString()));
} catch (Exception e) {
logger.error("Cannot create connection to Search&Browse database", e);
throw new BackendException("Cannot create connection to Search&Browse database");
}
}
}
Wenn es von der Steuerung aufgerufen wird mit SpringApplication.run gestartet(), die MongoService nicht null ist, aber, wenn ich von einem jUnit versuchen, es funktioniert nicht.
Also, ich versuche dies:
@RunWith(SpringRunner.class)
@SpringBootTest
@ContextConfiguration(classes = AppProperties.class)
public class MongoServiceTest {
private static final Logger logger = LoggerFactory.getLogger(MongoServiceTest.class);
@Autowired
MongoService mongoService;
@Test
public void MongoServiceAutowired() {
assertNotNull(mongoService);
}
}
aber ich bin immer diese Ausnahme:
org.springframework.beans.factory.UnsatisfiedDependencyException: Fehler Bean mit dem Namen zu schaffen ‚mypackage.MongoServiceTest ': Unbefriedigte Abhängigkeit ausgedrückt durch Feld' mongoService '; verschachtelte Ausnahme ist org.springframework.beans.factory.NoSuchBeanDefinitionException: Keine berechtigende Bean vom Typ 'mypackage.services.mongo.MongoService' verfügbar: erwartete mindestens 1 Bean, die sich als Autowire-Kandidat qualifiziert. Abhängigkeitsanmerkungen: {@ org.springframework.beans.factory.annotation.Autowired (erforderlich = wahr)}
Irgendwelche Anhaltspunkte? Wo versage ich?
'@ SpringBootTest' sucht nach einer' @ SpringBootApplication', die sich auf der Stammebene des Projekts befinden muss (weil sie rekursiv nach Spring Komponenten/Konfigurationen sucht) [oder anderweitig anzugeben, wo nach '@ComponentScan gesucht werden soll ']. Ist das der Fall? – DerM
Ich habe den @ComponentScan hinzugefügt, aber ohne Erfolg (jUnits sind im Ordner/test gespeichert) –