Olá Pessoal,
Nesse post veremos como rodar nossos unit tests com o Spring framework, ou seja, aproveitar tudo de bom que tem o Spring e fazer nossos unit test funcionar normalmente. É bastante simples.
lets go…
Começando
Bem não vou entrar nos detalhes do que é unit test, Spring, JUnit etc. Vamos direto ao ponto de maneira prática. Primeiro Crie um Java Project, o meu será SpringExampleUnitTest
note: claro que você precisa ter baixado o Spring framework core versão 3.x.
Note: adicione o arquivo commons-logging-1.1.1.jar caso não tenha só baixar esse arquivo, basta digitar o nome no Google .
Desenvolvendo
Como bom baiano e pensando no carnaval de salvador vamos de chicletão. Temos uma interface que tem um método e uma classe que vai implementar:
package br.com.camilolopes;
public interface Competidor {
public void apresentar();
}
public class Chicletao implements Competidor {
private Chicleteiro chicleteiroMusica;
@Override
public void apresentar() {
chicleteiroMusica.cantar();
}
public void setChicleteiroMusica(Chicleteiro chicleteiroMusica) {
this.chicleteiroMusica = chicleteiroMusica;
}
}
public interface Musica {
void cantar();
}
public class Chicleteiro implements Musica {
@Override
public void cantar() {
System.out.println(“chicleteiro eu, chicleteira ela”);
}
}
E no package conf, criamos um xml com as configurações do Spring:
<beans xmlns=”http://www.springframework.org/schema/beans”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd”>
<!– classe normal –>
<bean id=”chicleteiro” />
<!– classe que implementa a interface –>
<bean id=”bell”>
<property name=”chicleteiroMusica” ref=”chicleteiro”/>
</bean>
</beans>
Pronto. Agora vamos criar a classe de teste.Porém, vamos entender o que acontece com a nossa aplicação. Quando o método apresentar() é invocado, a classe vai se apresentar com a musica que deseja, no caso da classe Chicleteiro, vai cantar: “chicleteiro eu, chicleteira ela”.
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={“classpath:conf/idolos.xml”})
public class ChicletaoTest {
@Autowired
private Chicleteiro chicleteiro;
@Test
public void testCantar() {
Chicletao chicletao = new Chicletao();
chicletao.setChicleteiroMusica(chicleteiro);
try{
chicletao.apresentar();
}catch (NullPointerException e) {
Assert.fail(“not expected result”);
}
}
Com Spring precisamos usar anotação @RunWith e informar qual framework vamos usar, no nosso caso usamos o JUNIT.Em seguida com anotações @ContextConfiguration estamos dizendo qual o xml que tem as configurações do Spring que usaremos para os testes. Que é o mesmo da aplicação. Em seguida fizemos um teste que apenas chama o método apresentar, e esperamos que nunca tenhamos um NullPointerException, mas para isso acontecer é apenas se a instância que chama o método for null, ou seja, não for instanciada. E com esse teste estamos validando duas coisas, uma que o Spring realmente está instanciando o atributo e que o resultado é o que esperamos. Veja:
E assim temos nosso unit test integrado com o Spring. Simples não?
GitHub
Acesse o repositório no github com todos os projetos da série Spring: https://github.com/camilolopes/workspacespring
Vou ficando por aqui!!
See ya!