Olá, pessoal! Nesse artigo 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 funcionarem normalmente. É bastante simples.
let’s 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.
Nota: claro que você precisa ter baixado o Spring framework core versão 3.x.
Nota: 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.
Depois 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!!