[RESOLVIDO] Obter Bean do Spring com JUnit

5 respostas
rubensdemelo

Pessoal, tô ralando aqui, com uma coisa relativamente simples. Sei que o erro é pq não tá encontrando o arquivo no caminho especificado, já consultei aqui aqui, mas não consegui. Pesquisei uns tutoriais, mas todos indicam a mesma coisa que está na documentação. Acho que na hora de passar a string para o ClassPathXmlApplicationContext eu tô errando a maneira de como indicar o caminho para o arquivo.

Quero fazer uma classe de teste que retorne meu bean, definido no applicationContext.xml, mas não tô conseguindo indicar o caminho certo para a localização do arquivo. Segue abaixo os métodos, o erro e o meu diretório de pacotes no eclipse:

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans default-autowire="autodetect"
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
                           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
                           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
                           
		  
		  	<bean id="aprenderAPP" class="br.com.rubens.WicketApplication.java"/>
		  
</beans>
public class SpringAcess {

	private static ApplicationContext app;

	public SpringAcess() {

	}

	public static synchronized ApplicationContext getSpringContext() {

		if (app == null)
			app = new ClassPathXmlApplicationContext("aprender/src/main/resources/applicationContext.xml");
		return app;

	}

}

Classe de testes:

import org.springframework.beans.factory.parsing.BeanComponentDefinition;
import org.springframework.context.ApplicationContext;

import br.com.rubens.util.SpringAcess;

import junit.framework.TestCase;

public class testSpringAcess extends TestCase {
	
	public void testGetSpringContext(){
		
		System.out.println("INÍCIO");
		assertNotNull(SpringAcess.getSpringContext());
		Object x  = SpringAcess.getSpringContext().getBean("aprenderAPP");
		System.out.println("FIM");
		
		assertNotNull(x);
		
	}

}

Estrutura:
[img]http://www.uploadimagens.com/upload/7c98c0c968723489ea86d4b848891e03.jpg[/img]

[color=red]
ERRO:[/color]

INÍCIO
INFO  - sPathXmlApplicationContext - Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@198dfaf: display name [org.springframework.context.support.ClassPathXmlApplicationContext@198dfaf]; startup date [Thu Aug 13 23:34:26 BRT 2009]; root of context hierarchy
INFO  - XmlBeanDefinitionReader    - Loading XML bean definitions from class path resource [aprender/src/main/resources/applicationContext.xml]

5 Respostas

fabiofalci

O caminho deve ser

app = new ClassPathXmlApplicationContext("/applicationContext.xml");

E se quiser entrar mais no mundo spring, olhe essa documentação de testes do spring
http://static.springsource.org/spring/docs/2.5.x/reference/testing.html

rubensdemelo

fabiofalci:
O caminho deve ser

app = new ClassPathXmlApplicationContext("/applicationContext.xml");

E se quiser entrar mais no mundo spring, olhe essa documentação de testes do spring
http://static.springsource.org/spring/docs/2.5.x/reference/testing.html

Mesmo o meu applicationContext estando dentro do pacote: /src/main/resources/applicationContext.xml ?

fabiofalci

Ele está dentro do teu classpath.
E o teu classpath vai comecar a partir do

Imagina quando colocares num jar, não vai essa pasta, mas sim a partir dela.

Para entender olhe o diretório bin do projeto, pense que é a partir do bin que vale o caminho! :wink:

rubensdemelo

fabiofalci:
Ele está dentro do teu classpath.
E o teu classpath vai comecar a partir do

Imagina quando colocares num jar, não vai essa pasta, mas sim a partir dela.

Para entender olhe o diretório bin do projeto, pense que é a partir do bin que vale o caminho! :wink:

Ah cara, pode deixar. Vou tentar fazer isso sim. Valeu a dica.

rubensdemelo

Então, deu certo. Tive foi só mudar o caminho para:

if (app == null)
			app = new ClassPathXmlApplicationContext("applicationContext.xml");
		
		return app;

E dentro o applicationContext.xml tbm estava errado, eu coloquei o nome da classe + extensão *.java.

O correto é colocar apenas o caminho da classe, sem extensão:

<bean id="aprenderAPP" class="br.com.rubens.WicketApplication" />
Criado 13 de agosto de 2009
Ultima resposta 14 de ago. de 2009
Respostas 5
Participantes 2