2013-09-16 2 views
0

Я хочу написать модульный тест для DAO. Но в нашем проекте у нас более 200 классов DAO и 200. И мы используем jpaRepository для записи DAO. Но у меня проблема, когда я запускаю свой модульный тест. Я занимаю много времени, чтобы создать контекст приложения. У меня есть мысль. Я создаю только DAO, который я хочу проверить вместо создания всех DAO. Но DAO jpa: репозиторий - это интерфейс, поэтому я не могу создать bean-компонент с интерфейсом класса. Если создание компонента, расширяющего jpa: reponsitories, невозможно, вы можете предложить мне другие способы быстрее запускать блок. мой блок тест:Как создать компонент, который расширяет JpaRepository

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = {"classpath:META-INF/spring/testContext.xml"}) 
@TransactionConfiguration(defaultRollback = true) 
// Importance, as the transaction will be rollback for each test 
// give us a clean state. 
@Transactional 
public class CommunicationDetailDAOTest 
{ 
    @Autowired 
    CommunicationDetailDAO communicationDetailDAO; 

    @Test 
    public void testSomeThing() 
    { 

     System.out.println("helloworld"); 
    } 
} 

файл testContext.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:jpa="http://www.springframework.org/schema/data/jpa" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd"> 

    <bean id="placeholderConfig" 
      class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="location" value="classpath:META-INF/spring/properties/prism_local_persistence_test.properties"/> 
    </bean> 


    <bean id="entityManager" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="dataSource" ref="dataSource"/> 
     <property name="persistenceXmlLocation" value="/META-INF/persistence.xml"/> 
     <property name="persistenceUnitName" value="mobilePersistenceUnit"/> 
     <property name="jpaVendorAdapter"> 
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"></bean> 
     </property> 
    </bean> 

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
     <property name="driverClassName" value="${db.driver}"/> 
     <!--using postgres driver--> 
     <property name="url" value="${db.url}"/> 
     <property name="username" value="${db.username}"/> 
     <property name="password" value="${db.password}"/> 
    </bean> 

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
     <property name="dataSource" ref="dataSource"></property> 
     <property name="entityManagerFactory" ref="entityManager"/> 
    </bean> 

    <!-- Spring Data Jpa setup --> 
    <jpa:repositories 
      base-package="com.discorp.model.dao" 
      entity-manager-factory-ref="entityManager" 
      transaction-manager-ref="transactionManager"></jpa:repositories> 

    <tx:annotation-driven transaction-manager="transactionManager"/> 
    <!--<context:component-scan base-package="com.qsoft"/>--> 
</beans> 

и файл persistence.xml

<?xml version="1.0" encoding="UTF-8"?> 
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0"> 

    <persistence-unit name="mobilePersistenceUnit" transaction-type="RESOURCE_LOCAL"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 
     <class>com.discorp.model.common.Address</class> 
     <class>com.discorp.model.common.Application</class> 
     .... more than 200 model classes 
     <properties> 
      <property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/> 
      <property name="hibernate.show_sql" value="false"/> 
      <!--<property name="hibernate." value="false"/>   --> 
     </properties> 
    </persistence-unit> 
</persistence> 

ответ

0

сделать различные конфигурационные файлы для различных тестов включающийся только дао (s) необходимых для испытания:

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:jpa="http://www.springframework.org/schema/data/jpa" 
    xmlns:repository="http://www.springframework.org/schema/data/repository" 
... 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
... 
    http://www.springframework.org/schema/data/jpa 
    http://www.springframework.org/schema/data/jpa/spring-jpa.xsd 
    http://www.springframework.org/schema/data/repository 
    http://www.springframework.org/schema/data/repository/spring-repository.xsd 
..."> 

... 

<jpa:repositories base-package="path.to.your" > 
    <repository:include-filter type="assignable" expression="path.to.your.Repository"/> 
</jpa:repositories> 

+0

Когда я устанавливаю как: ' <репозиторий: тип включает фильтр =" «выражение = "communicationDetailDAO com.discorp.model.dao.CommunicationDetailDAO"/> ', у меня есть сообщение об ошибке префикс "хранилище" для элемента «репозиторий: include-filter» не привязан –

+0

Вы должны добавить 'xmlns: repository =" http://www.springframework.org/schema/data/repository "и' http: //www.springframework. org/schema/data/repository http: //www.springfr amework.org/schema/data/repository/spring-repository.xsd' в ваш '' -tag. –

Смежные вопросы