通常はSpringApplication.run()
で呼び出される_@Service
_クラスをテストしたいと思います。
サービスクラスは次のとおりです。
_@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");
}
}
}
_
SpringApplication.run()
で開始されたコントローラーによって呼び出された場合、MongoService
はnullではありませんが、jUnitから試行した場合は機能しません。
だから、私はこれを試しています:
_@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);
}
}
_
しかし、私はこの例外を取得しています:
org.springframework.beans.factory.UnsatisfiedDependencyException:「mypackage.MongoServiceTest」という名前のBeanの作成中にエラーが発生しました:フィールド「mongoService」で表現された不満足な依存関係。ネストされた例外はorg.springframework.beans.factory.NoSuchBeanDefinitionExceptionです:タイプ 'mypackage.services.mongo.MongoService'の修飾Beanは使用できません:autowire候補として適格なBeanが少なくとも1つ必要です。依存関係のアノテーション:{@ org.springframework.beans.factory.annotation.Autowired(required = true)}
どんな手掛かり?私はどこで失敗していますか?
AppProperties
とMongoService
は同じパッケージに含まれていないと思います
そうでない場合は、その方法でMongoService
を注入できます:
TestConfiguration
という名前の別のクラスを作成します
@ComponentScan(basePackageClasses = {
MongoService.class,
AppProperties.class
})
@SpringBootApplication
public class TestConfiguration {
public static void main(String[] args) {
SpringApplication.run(TestConfiguration.class, args);
}
}
そして、テストでは次のように変更します。
@RunWith(SpringRunner.class)
@SpringBootTest(classes = TestConfiguration.class)
public class MongoServiceTest {
private static final Logger logger = LoggerFactory.getLogger(MongoServiceTest.class);
@Autowired
MongoService mongoService;
@Test
public void MongoServiceAutowired() {
assertNotNull(mongoService);
}
}