次のような構成のjunitテストクラスがあります。
@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners({ WebContextTestExecutionListener.class,
DependencyInjectionTestExecutionListener.class,
DirtiesContextTestExecutionListener.class,
TransactionalTestExecutionListener.class })
@ActiveProfiles("test")
@DirtiesContext
@ContextConfiguration(loader = AnnotationConfigContextLoader.class, classes = {
SpringConfig.class, SpringTestingConfig.class,
SpringLocalContainerJPAConfig.class, CustomConfiguration.class })
テストメソッドはサービスメソッドを呼び出しており、サービスクラスには@Transactional
何らかの理由で注釈があります。サービスメソッドのテストケースを作成すると、失敗しorg.hibernate.PersistentObjectException: detached entity passed to persist
、この投稿のように例外が発生します:
org.hibernate.PersistentObjectException: detached entity passed to persistメモリデータベースでH2を使用し
、この例外を修正するには、テストクラスに注釈を付ける必要がありますが、マネージドBeanでは同じコードを呼び出すと正常に動作するため、テストで時々必要になる理由と、いつ注釈を付ける必要があるかが@Transactional
私の質問ですサービス層にこのアノテーションがあることを考慮して@Transactional
クラスをテストします。@Transactional