Tetando DAO que utiliza Spring

7 respostas
K

Olá.

Estou tentando testar um DAO eu utiliza o suporte Hibernate do Spring. Segue o código do método que quero testar:

public class RegistroDAO extends HibernateDaoSupport implements GenericDAO {

	public void save(Object object) {
		getHibernateTemplate().save(object);
	}

}

Só que ao testar a action que utiliza esse método, ocorre um NPE, pois acredito que o Spring deve estar "inicializado" para que eu possa utilizar essa integração.

A dúvida é: como testar DAOs que utilizam a integraçã Hibernate + Spring ?

Obrigado!

7 Respostas

keller

Poderia colocar o applicationContext.xml e a classe que utiliza o DAO ?

Até…

K

Claro gui...

<!-- DataSource -->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName" value="org.postgresql.Driver"/>
		<property name="url" value="jdbc:postgresql://localhost:5432/empresa"/>
		<property name="username" value="user"/>
		<property name="password" value="pass"/>
	</bean>

	<!-- SessionFactory -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="hibernateProperties">
           	<props>
	   			<prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
				<prop key="hibernate.show_sql">true</prop>
				<prop key="hibernate.c3p0.minPoolSize">5</prop>
				<prop key="hibernate.c3p0.maxPoolSize">20</prop>
				<prop key="hibernate.c3p0.timeout">600</prop>
				<prop key="hibernate.c3p0.max_statement">50</prop>
				<prop key="hibernate.c3p0.testConnectionOnCheckout">false</prop>
  			</props>
        </property>
        <property name="mappingResources">
            <list>
                <value>\br\com\empresa\model\Registro.hbm.xml</value>
            </list>
        </property>
    </bean>

	<!-- DAOs -->
<bean id="registroDAO" class="br.com.empresa.dao.hibernate.RegistroDAO">
		<property name="sessionFactory" ref="sessionFactory"/>
	</bean>
</beans>
keller

E a classe que utiliza o DAO ?

Até…

K
public class RegistroAction extends ActionSupport {

	private Registro registro;
	private RegistroDAO registroDAO;

	public String save() throws Exception {
		registroDAO.save(registro);
        addActionMessage(getText("save.success"));
        return SUCCESS;
    }
keller

Gere os Getters e Setters , deve funcionar depois disso.

Espero que ajude…
[]s

K

Guilherme, eu coloquei apenas um trecho da action. Ela possui os get /set para o a classe Registro e RegistroDAO.

Quando eu executo o teste, a NPE é acusada no seguinte trecho:

Por isso, deduzi que o spring não está sendo “inicializado”.

keller

Desculpe KurumaJava nao li toda a sua pergunta.
Faça o seguinte adicione isso ao web.xml

<!-- Configuracao do Spring -->
  	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/classes/applicationContext*</param-value>
	</context-param>
<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

Espero que resolva o problema…
[]s

Criado 27 de agosto de 2006
Ultima resposta 27 de ago. de 2006
Respostas 7
Participantes 2