2

Delta Spike ( ) を使用して単体テスト内から CDI (Open Web Beans を使用) を動作させようとしています@RunWith(CdiTestRunner.class)。依存性注入は正常に機能していますが、私の EntityManagerFactory は常に null です:

public class EntityManagerProducer {

    @PersistenceContext(unitName = "sbPersistenceUnit")
    private EntityManagerFactory emf;  //Always null

    @Produces
    public EntityManager create() {            
        return emf.createEntityManager();
    }

    public void close(@Disposes EntityManager em) {
        if (em.isOpen()) {
            em.close();
        }
    }
}

persistence.xmlセッション ファクトリを手動で作成できるので、問題がないことはわかっています。

EntityManagerFactory test = Persistence.createEntityManagerFactory("sbPersistenceUnit");

他のすべての注射は正常に機能しています。何が欠けているか知っている人はいますか?

4

3 に答える 3

1

@PersistenceUnitEntityManagerFactory を注入するために使用する必要があります。@PersistentContextEntityManager インジェクションに使用されます。

于 2015-04-18T18:23:26.600 に答える
1

単体テストでは、管理された環境にいません。OpenWebBeans は、openwebbeans-resource モジュール + @PersistenceUnit を介してそれをサポートしますが、これは移植性がありません。したがって、たとえば次を使用する必要があります。

@Specializes
public class TestEntityManagerProducer extends EntityManagerProducer {
    private EntityManagerFactory emf = Persistence.createEntityManagerFactory("...");

    @Produces
    //...
    @Override
    protected EntityManager create() {
        return emf.createEntityManager();
    }

    @Override
    protected void close(@Disposes EntityManager em) {
        if (em.isOpen()) {
            em.close();
        }
    }
}

テストクラスパスで

メーリングリストでそのような質問をすると、ささいな答えがすぐに得られます.

于 2015-06-27T23:12:03.153 に答える
0

entitymanagerFactory を Bean として定義していますか?

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>
于 2015-04-17T15:38:42.287 に答える