Os testes no jUnit não veem o que foi instanciado do setUp()

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

Obrigado por informar, não estava vendo este erro.
Mas, ainda assim os métodos não estão vendo o que foi instanciado no setUp().

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.

Oi Lucas!

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.

Dá algum erro de compilação? Ou apenas na hora de executar?

Uma coisa que pode afetar é, dependendo da versão do junit (4 ou 5) vc deve usar os imports corretos para as anotações @Test e @Before.

Não está dando erro de compilação. Os testes sempre apresentam falha, mesmo estando correto os valores.

Quando instancio no método dar o resultado esperado.

Da forma que você mostrou deu certo…
Vou fazer nos outros testes.
Obrigado!