2017-05-23 11 views
3

私はプログラミングの世界には新しいので、私の言うことはばかげているかもしれません。EntityManagerFactory Spring起動テストのBean

私は、Eclipseの下でのJUnitのように、スプリングブートテストを実行しようとしていますが、私はちょうど私が、いくつかのガイドを読んで、このウェブサイトを閲覧しなかったがいる...春ブート注釈を使用する方法を見つけ出すことはできません私の問題を解決したものを見つけてください。

私は下のJUnitテストクラスを実行しようとしています:

java.lang.IllegalStateException: Failed to load ApplicationContext 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cDao': Injection of persistence dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'javax.persistence.EntityManagerFactory' available 

CDaoクラスからのEntityManagerパラメータがあります。JUnitテストは私に次の例外を与えるとして、これを実行する

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(classes={CBusiness.class,CService.class,CDao.class}, loader = AnnotationConfigContextLoader.class) 
@SpringBootTest 
public class CalculTest { 

@Autowired 
    CBusiness business; 

@Test 
    public void testCalcul() throws TechnicalException { 
     Object object= new Object(); 
     object.setId1("00"); 
     object.setId2("01"); 
     object.setNombrePlacesMaximum(new BigInteger("50")); 
     Long result=business.calcul(object); 
     assertTrue(result>0); 
    } 

注釈@PersistenceContext、これは自動的にHibernateによって生成されたと思ったが、明らかにそうではありません...どうすればJavaコードのみを使用してEntityManagerをインスタンス化できますか?

ビジネス・レイヤー:

@Component("cBusiness") 
public class CBusiness { 
    @Autowired 
    CService cService; 

public long calcul(Object object) throws TechnicalException { 
//Code (calls a method from CService class) 
} 

サービス層:

@Service 
public class CService { 
    @Autowired 
    CDao cDao; 
私は

ここFYI

テストによって呼び出されるクラスです...任意の.xmlファイルまたは.propertiesファイルのファイルを持っていません

ダオ・レイヤー

@Repository 
@Transactional(rollbackFor = {TechnicalException.class}) 
public class CDao { 

    @PersistenceContext 
    EntityManager entityManager; 

ビジネス層の@autowireアノテーションだけを使ってWebサービス内のメソッドをテストしようとしましたが、うまくいけばJUnitテストでインスタンス化できません。私はこのテストを実行するいくつかの方法を試しましたが、これが正しい方法であるかどうかはわかりませんので、私はどんな提案にも開放しています。

ありがとうございます。

+0

ContextConfiguration' @削除 '...春ブーツはあなたのための検出を行います... –

+0

私はそれを試してみましたが、今、私は次の例外があります java.lang.IllegalStateExceptionを:によって引き起こさApplicationContextのロードに失敗しました:java.lang.IllegalArgumentException:LoggerFactoryはLogback LoggerContextではありませんが、Logbackはクラスパス上にあります。 Logbackまたは競合する実装(クラスorg.slf4j.helpers.NOPLoggerFactoryをファイル/ D:/m2repo/org/slf4j/slf4j-api/1.7.24/slf4j-api-1.7.24.jarからロードする)を削除します。 WebLogicを使用している場合は、WEB-INF/weblogic.xmlのprefer-application-packagesに「org.slf4j」を追加する必要があります。org.slf4j.helpers.NOPLoggerFactory – Remi

+0

このスタックトレースは読んでいますか?あなたはあなたの依存関係に問題があります... –

答えて

3
@Configuration 
@EnableTransactionManagement 
public class PersistenceJPAConfig{ 

    @Bean 
    public LocalContainerEntityManagerFactoryBean entityManagerFactory() { 
     LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); 
     em.setDataSource(dataSource()); 
     em.setPackagesToScan(new String[] { "\\your package here" }); 

     JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); 
     em.setJpaVendorAdapter(vendorAdapter); 
     em.setJpaProperties(additionalProperties()); 

     return em; 
    } 

    @Bean 
    public DataSource dataSource(){ 
     DriverManagerDataSource dataSource = new DriverManagerDataSource(); 
     dataSource.setDriverClassName("\\Driver"); 
     dataSource.setUrl("\\URL"); 
     dataSource.setUsername("\\userName"); 
     dataSource.setPassword("\\password"); 
     return dataSource; 
    } 

    @Bean 
    public PlatformTransactionManager transactionManager(EntityManagerFactory emf){ 
     JpaTransactionManager transactionManager = new JpaTransactionManager(); 
     transactionManager.setEntityManagerFactory(emf); 

     return transactionManager; 
    } 
+0

これは私の基本的なプログラミングレベルでは本当に複雑に見えます。それにもかかわらず、私はそれを試みましたが、driverClassNameが何であるか分からず、 "Bean DataSourceをインスタンス化できません"という例外があります。私がJUnit spring-bootテスト以外の場所でテストすると、メソッドはうまく動作します。 – Remi

+0

http://www.baeldung.com/the-persistence-layer-with-spring-and-jpa – Binu

+0

春の起動時にはこれは必要ありません。春の起動は、あなたのためにすぐに使用できます。 –

関連する問題