Por que meu feijão é nulo?
-
25-09-2019 - |
Pergunta
Estou tentando aprender a usar o ApplicationContext. Meu objetivo é trocar um repositório de dados simulado por um real ao usar meus testes de unidade. Não quero fazer isso explicitamente, quero fazer isso com injeção de dependência.
Portanto, como um teste simples antes de complicar as coisas, estou simplesmente tentando tirar um feijão do meu ApplicationContext.xml. Pelo que li, isso deve funcionar:
@ContextConfiguration(locations = "/applicationContext.xml")
public class ResultsListTests {
@Resource
CompanyResult resultBean;
@Test
public void shouldAddResults() {
assertEquals(resultBean.getCompanyName(), "Microsoft");
Mas meu resultado é sempre nulo. Aqui está o meu ApplicationContext.xml, localizado em WebContent/Web-Inf:
<?xml version="1.0" encoding="UTF-8"?>
<beans>
<bean id="resultBean" name="resultBean" class="com.trgr.cobalt.company.domain.CompanyResult">
<property name="companyName">
<value>Microsoft</value>
</property>
</bean>
</beans>
Então, por que meu resultado é sempre nulo? O que eu fiz incorretamente?
Solução
Você está perdendo um @RunWith(SpringJUnit4ClassRunner.class)
anotação:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "/applicationContext.xml")
public class ResultsListTests {
@Resource
CompanyResult resultBean;
@Test
public void shouldAddResults() {
assertEquals(resultBean.getCompanyName(), "Microsoft");
}
}
POR FALAR NISSO, em sua amostra, WebContent/WEB-INF
não é o local adequado para applicationContext.xml
.
Se você especificar @ContextConfiguration(locations = "/applicationContext.xml")
Então a primavera procurará applicationContext.xml
na raiz do caminho de classe, não em WebContent/WEB-INF
(Junit não tem conhecimento do fato de que este é um aplicativo da web).
Para maiores informações, Vejo Documentação de referência da primavera.