середа, 12 грудня 2012 р.

Spring 3. JUnit Тестирование Service и DAO

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

Немає коментарів:

Дописати коментар

HyperComments for Blogger

comments powered by HyperComments