В этой статье я покажу, как реализовать JUnit тестирование для Service приложений Spring Web и DAO.
Configuration
Мы нуждаемся в JPA Hibernate конфигурации для тестирование в памяти:
@Configuration
@EnableTransactionManagement
public class JpaTestConfig {
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(){
LocalContainerEntityManagerFactoryBean lcemfb
= new LocalContainerEntityManagerFactoryBean();
lcemfb.setDataSource(this.dataSource());
lcemfb.setPackagesToScan(new String[] {'com.jverstry'});
lcemfb.setPersistenceUnitName('MyTestPU');
HibernateJpaVendorAdapter va = new HibernateJpaVendorAdapter();
lcemfb.setJpaVendorAdapter(va);
Properties ps = new Properties();
ps.put('hibernate.dialect', 'org.hibernate.dialect.HSQLDialect');
ps.put('hibernate.hbm2ddl.auto', 'create');
lcemfb.setJpaProperties(ps);
lcemfb.afterPropertiesSet();
return lcemfb;
}
@Bean
public DataSource dataSource(){
DriverManagerDataSource ds = new DriverManagerDataSource();
ds.setDriverClassName('org.hsqldb.jdbcDriver');
ds.setUrl('jdbc:hsqldb:mem:testdb');
ds.setUsername('sa');
ds.setPassword('');
return ds;
}
@Bean
public PlatformTransactionManager transactionManager(){
JpaTransactionManager tm = new JpaTransactionManager();
tm.setEntityManagerFactory(
this.entityManagerFactoryBean().getObject() );
return tm;
}
@Bean
public PersistenceExceptionTranslationPostProcessor exceptionTranslation(){
return new PersistenceExceptionTranslationPostProcessor();
}
}
@Configuration
@ComponentScan(basePackages = {
'com.devcolibri.Controller',
'com.devcolibri.DAO',
'com.devcolibri.Item',
'com.devcolibri.Service'
})
public class TestConfig {
@Bean
public MyService getMyService() {
return new MyServiceImpl();
}
}
@RunWith – эта аннотации JUnit, позволяющий запустить тест в другом потоке, предоставляемых JUnit.
SpringJUnit4ClassRunner – этот поток JUnit теста для Spring приложений. Как правило, тест классов annoted с @RunWith (SpringJUnit4ClassRunner.class).
@ContextConfiguration – эта аннотация может быть использована, чтобы указать, как загрузить ApplicationContext в тестовом классе Spring. Это может быть настроено с помощью файлов XML или объектов Java конфигурации.
Тестирование Service
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes={ JpaTestConfig.class, TestConfig.class })
public class MyServiceImplTest {
@Autowired
private MyService myService;
@Test
public void testCreateAndRetrieve() {
MilliTimeItem retr = myService.createAndRetrieve();
assertNotNull(retr);
}
}
Тестирование DAO
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes={ JpaTestConfig.class, TestConfig.class })
public class MyPersistenceDAOTest {
@Autowired
private MyPersistenceDAO myDAO;
@Test
public void testCreateMilliTimeItem() {
// Эта операция не должна бросать исключений
long id = myDAO.createMilliTimeItem();
}
@Test
public void testGetMilliTimeItem() {
long id = myDAO.createMilliTimeItem();
MilliTimeItem retr = myDAO.getMilliTimeItem(id);
assertNotNull(retr);
assertEquals(id,retr.getID());
}
}
Ресурс: www.devcolibri.com
Немає коментарів:
Дописати коментар