2017-12-29 42 views
1

SpringApplication.run()で通常呼び出される@Serviceクラスをテストします。spring-boot @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は、私はそれが働いていないのJUnitからしようとすると、nullではありませんが。

@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:エラーは、「名前のBeanを作成しmypackage.MongoServiceTest ':mongoServiceフィールドで表現されている満足度の低い依存性。ネストされた例外はorg.springframework.beans.factory.NoSuchBeanDefinitionExceptionです: 'mypackage.services.mongo.MongoService'タイプの適格なBeanがありません:autowire候補と見なされる少なくとも1つのbeanが必要です。依存関係の注釈:{@ org.springframework.beans.factory.annotation.Autowired(必須= true)}

手掛かりがありますか?私はどこで失敗しますか?

+0

'@ SpringBootTest'はプロジェクトのルートレベルにある必要がある' @ SpringBootApplication'を探しています(Spring のコンポーネント/設定を再帰的に検索するため)[または@ComponentScan ']。これは本当ですか? – DerM

+0

@ComponentScanを追加しましたが成功しません(jUnitsは/ testフォルダに保存されています) –

答えて

1

私はあなたがそのようにMongoServiceを注入することができない場合は、あなたのAppPropertiesMongoServiceは、同じパッケージに

ではないことを前提としています

TestConfiguration

@ComponentScan(basePackageClasses = { 
     MongoService.class, 
     AppProperties.class 
}) 
@SpringBootApplication 
public class TestConfiguration { 
    public static void main(String[] args) { 
     SpringApplication.run(TestConfiguration.class, args); 
    } 
} 

とInという名前の別のクラスを作成しますテストは次のように変更されます:

@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); 
    } 
} 
関連する問題