如何在junit運行時測試期間使用多個datasouce和sessionFactory?如何在junit運行時測試期間使用多個datasouce和sessionFactory
我用hibernateDaoTemplate持久性,而我的結構就在這裏:
我只是想從不同的數據庫獲取,比如說產品,然後他們堅持在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);
}
..
}
首先感謝。我如何在一個測試課上注入不同的會話工廠?你有關將sessionFactory保留在服務類而不是測試類的建議嗎? – Javatar
那我該如何設置不同的數據源? – Javatar
實際上,DAO級別都使用sessionfactory;你的服務甚至不應該意識到hibernate被用於持久化。最好的選擇是可能有2個DAO(一個檢索一個持久化productstats)並在其中注入不同的sessionfactory(一個針對DB-A配置,另一個針對DB-B)。請注意,除非您擁有真正的(J2EE)事務管理器(如Websphere或JBoss),否則不能在1個事務中使用2個DB。如果你使用Tomcat或Jetty,你將不得不整合Atomikos來實現這一點。 –