Hibernate/JPA を使用した成熟した Java アプリケーションが正常に動作しています。いくつかのユニット/統合テストを追加しようとしています。Spring の TestContext フレームワークを使用してこれを行っています。テスト クラスは次のようになります。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
public class ServiceTest {
@Autowired
private MyService myService;
@Test
public void testWorkspaceThing() throws Exception {
List<MyEntity> entities = myService.someMethod();
assertNotNull(entities);
}
}
必要なすべてのコンテキスト構成をアプリケーション コンテキストからコピーして ServiceTest-context.xml に貼り付けました。これには、context:component-scan、dataSource の定義、entityManagerFactory Bean などが含まれます。アプリケーションの実行中、エラーは発生しません。このテストを実行すると、次のようになります。
java.lang.IllegalArgumentException: org.hibernate.hql.ast.QuerySyntaxException: MyEntity is not mapped.
すべての Entity クラスについて、クエリを試みます。Entity クラスには、javax.persistence.Entity などのアノテーションが付けられます。
これが TestContext を使用して失敗する理由を知っている人はいますか?
アップデート
persistence.xml ファイルは基本的に空です。
<persistence-unit name="some-pu" />
したがって、注釈付きのすべてのエンティティクラスを見つけるために自動スキャンしていると思います。単体テストの実行中のフォルダー構造と、Tomcat での展開方法のディレクトリ構造の違いでしょうか? persistence.xml は WebContent/WEB-INF/classes/META-INF にあります
また、Spring 3.1 で「packagesToScan」を定義できることに気付きましたが、Spring 3.0.6.RELEASE を使用しています。