junitランタイムテストで複数のdatasouceおよびsessionFactoryを使用するにはどうすればよいですか?junitランタイムテスト中に複数のdatasouceおよびsessionFactoryを使用する方法
は私が永続化のためhibernateDaoTemplateを使用し、私の構造は、右のダウンここにある:
私はちょうど別のDBから、たとえば、製品を取得し、ProductStatServiceTestランタイムで異なるデシベルにそれらを保持したい。
ありがとうございます。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/dataSource.xml", "/hibernate.xml", "/applicationContext.xml"})
@TestExecutionListeners({DependencyInjectionTestExecutionListener.class})
@TransactionConfiguration(transactionManager = "txManager", defaultRollback = true)
public abstract class GenericTransactionalUnitTest extends AbstractTransactionalJUnit4SpringContextTests {
private Session session;
protected abstract SessionFactory getSessionFactory();
...
}
@Transactional(readOnly = true)
abstract public class ProductStatUnitTest extends GenericTransactionalUnitTest {
@Autowired
@Qualifier(value = "productStatSessionFactory")
private SessionFactory sessionFactory;
@Resource(name = "productStatDS")
public void setDataSource(DataSource dataSource) {
super.setDataSource(dataSource);
}
@Override
protected SessionFactory getSessionFactory() {
return sessionFactory;
}
}
public class ProductStatServiceTest extends ProductStatUnitTest {
@Autowired
private ProductStatService productStatService;
@Test
public List<ProductStat> testInjection() throws ParseException {
productStatService.findById(123456);
}
..
}
ありがとうございます。 1つのテストクラスに異なるセッションファクトリを注入するにはどうすればよいですか?テストクラスではなく、サービスクラスにsessionFactoryを保持することをお勧めしますか? – Javatar
次に、さまざまなデータソースを設定するにはどうすればよいですか? – Javatar
実際には、セッションファクトリーはDAOレベルでは使用されません。あなたのサービスは、休止状態が永続性のために使用されていることを認識してはいけません。最良の選択肢はおそらく、2つのDAO(1つは取得し、もう1つはプロダクト・スタットを保持する)で、別のセッションファクトリー(DB-A用に構成されたものとDB-B用に構成されたもの)を注入することです。実際の(J2EE)トランザクションマネージャ(WebsphereやJBossなど)を持っていない限り、2つのDBを1つのトランザクション内で使用することはできません。 TomcatまたはJettyを使用している場合は、これを可能にするためにAtomikosを統合する必要があります。 –