У меня есть такой простой класс для тестирования JUnit:Несколько пружинные источники данных для тестирования JUnit
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:/mysql-datasource-context.xml"})
public class EmployeeDAOTest {
@Autowired
EmployeeDao employeeDao;
@Test
public void findAllTest() {
assertTrue(employeeDao.findByName("noname").size() == 0);
}
}
Содержание MySQL-источника данных-context.xml выглядит следующим образом:
<context:component-scan base-package="my.packages.*"/>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/project"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="packagesToScan" value="my.packages.entity"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
<prop key="show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
Теперь тест работает без проблем для моей базы данных mysql.
Дело в том, что у меня также есть база данных postgres, и мне нужен каждый тестовый запуск как для баз данных mysql, так и postgres.
Единственное решение, которое приходит на ум мой создает еще один тестовый класс с точно теми же тестами, но аннотация, как
@ContextConfiguration(locations = {"classpath:/postgres -datasource-context.xml"})
и создать еще один источник данных файла контекст для него. К сожалению, этот способ не выглядит хорошим решением.
Есть ли лучший способ решить мою проблему?
К сожалению, employeeDAO в родительском классе не поддерживается автоматически без аннотации ContextConfiguration в классе. –
@ user2246018: вы правы, вы можете использовать mysql один в качестве базового класса и использовать пустой для postgres; Я обновил ответ – Giovanni