Estou tentando realizar os testes usando o jUnit na classe professor, fiz instancias no setUp, mas não sendo vistas nos testes que seguem de forma que mesmo correto os testes falham.
Olhei na literatura, mas não encontrei nada que me desse uma solução para esse problema. Iniciei a programar recentemente e não tenho muita experiência.
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import static org.junit.Assert.*;
class TestProfessor {
private Professor p1;
private Disciplina d;
private ArrayList<Disciplina> disciplinasProf = new ArrayList<Disciplina>();
@Before
public void setUp() {
//Armazenando dados do professor
d = new Disciplina("Ter 11:00 & Sex 11:00", "Rede de Computadores", "COMP08", "B101");
disciplinasProf.add(d);
d = new Disciplina("Ter 11:00 & Sex 11:00", "Análise de Algoritmos", "COMP09", "B101");
disciplinasProf.add(d);
p1 = new Professor("Paulo", "Computação", 51432, disciplinasProf);
System.out.println(p1.getNome());
}
@Test
public void testAcertaNomeDoProfessor() throws Exception {
Assert.assertEquals("Paulo", p1.getNome());
}
@Test
public void testAcertaMatDoProfessor() throws Exception {
Assert.assertNotEquals(51432, p1.getMatProfessor());
}
@Test
public void testErraDptoDoProfessor() throws Exception {
Assert.assertNotEquals("Matematica", p1.getDepartamento());
}
}
Este teste vai falhar com os dados que tens. Chamas o teste de “Acerta” mas testas com assertNotEquals com o valor correto. Deves querer usar o assertEquals…
Se estiver dando erro de compilação, vc deve iniciar as variáveis com null:
private Professor p1 = null;
private Disciplina d = null;
Devo dizer que há uma boa prática ao escrever testes, que é organizar a cada um de acordo com os 3 As:
// Arrange -> Aqui vc prepara os dados para cenário
// Act -> Aqui vc executa o cenário a ser validado
// Assert -> Aqui vc valida o cenário esperado
No seu caso, poderia ficar assim:
@Test
public void testAcertaNomeDoProfessor() throws Exception {
// Arrange
Professor fixture = new Professor("Paulo", "Computação", 51432, new ArrayList());
// Act
String actual = fixture.getNome();
// Assert
Assert.assertEquals("Paulo", actual);
}
Nesse exemplo, pode parecer bem desnecessário por ser um cenário extremamente simples. Porém, num sistema onde pode ter um número grande de testes, é interessante manter uma padronização para facilitar a leitura e manutenção dos testes.
Outra prática que costumo seguir é usar a palavra fixture para o artefato que sera testado e actual para o resultado que será validado.
Obrigado pela orientação de boas práticas, não sei se ainda veremos no curso.
Mas, é muito importante saber…
Inicializei com null, mas ainda não está funcionando.