Sou novo com testes automatizados.
Vou apresentar um caso de exemplo parecido com o que tenho aqui:
Preciso testar um ObjetoX
que tem um Construtor que recebe um IComponenteX
, assim:
public class ObjetoX {
public ObjectoX(IComponenteX cx) {...}
public int metodoA() {...}
public void metodoB(int i) {...}
}
O IComponenteX
é uma interface que até agora possui duas implementações, CompX1
e CompX2
.
Quero escrever um Teste que irá testar os métodos de ObjetoX
instanciando-o como new ObjetoX(new CompX1());
, e depois quero testar os métodos do ObjetoX
instanciando-o como new ObjetoX(new CompX2());
.
Criei uma Classe de Teste assim:
public Teste_ObjetoX {
private ObjetoX objX;
@Before public void setUp() {objX = new ObjetoX(new CompX1());} //roda antes de cada Teste
@Test public void testMetodoA() {...}
@Test public void testMetodoB() {...}
}
Com a Classe de Teste acima consigo testar a implementação "new ObjetoX(new CompX1());"
, mas, ainda não consigo testar a implementação "new ObjetoX(new CompX2());"
.
Eu poderia fazer uma cópia da Classe de Teste e mudar apenas a implementação do método setUp(), mas isso criaria muito código repetido. Talvez eu devesse extender então essa classe de Teste e sobrescrever o método setUp(), mas será que isso é uma boa ideia?:
Por enquanto, os métodos testMetodoA()
e testMetodoB()
podem ser os mesmos para testar o ObjetoX
construído com CompX1
ou com CompX2
, porque os resultados esperados são os mesmos. Talvez isso mude no futuro.
Então, como faço? Como vocês fazem?