В этой статье я покажу, как реализовать 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
Немає коментарів:
Дописати коментар