Help Junit

amigos, tenho uma duvida fiz a seguinte classe JUnit

@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class })
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class MensagemDaoTest {
	@Autowired
	private MensagemDao mensagemDao;
	
	private Boolean icIndiceCriado = null; 
	
	@BeforeClass
	public static void iniciou(){
		System.out.println("comecou");
	}
	
	@Before
	public void before(){
		if(icIndiceCriado == null){
			mensagemDao.createIndex();
			this.icIndiceCriado = true;
		}
	}
@Test
	public void comunicadoNaoEncontradoTest() throws ParseException, NullPointerException {
		List<TbComunicado> retorno = mensagemDao.buscarComIndice("dsMaisInformacoes", TbComunicado.class,"primeiroasdasjdasjdjalkdjlas");
		Assert.assertTrue(retorno.size() == 0);
	}

	@AfterClass
	public static void acabou(){
		System.out.println("acabou");
	}
}

porem estou com um problema, ele entra no meu metodo before, cria o index, vai para o primeiro metodo de teste, roda, antes de ir para o proximo ele volta no before (dai o if para nao executar mais de uma vez) porem ele sempre executa… ele seta como true, mas qdo volta para esse metodo, ele volta como null, nao esta gravando o estado da variavel…

alguem sabe como posso arrumar isso?

Obs, faco no @before e nao no @BeforeClass, pois no beforeClass ele ainda nao subiu o meu spring.

Obrigado

amigo, o @Before roda do zero cada novo test, pois cada teste é uma nova thread do Junit.

Outro detalhe cada teste não necessariamente roda na ordem que foi inserida, pois ele tenta na medida do possível rodar testes em paralelo e de forma assíncrona.

Esse problema tem que ser resolvido da seguinte forma cada novo teste vc cria um indice do zero.

e mas dai eu perco um tempo grande criando o indice, sendo que ele so precisa ser criado uma vez para rodar todos os outros testes…

Então vc esta desenvolvendo incorretamente seu teste.

Neste caso, vc precisa estudar como fazer um Mock do metodo que cria o indice, um bom framework java para isso se chama Mockito.

Ai nisso vc criaria um indice fake, ja contendo os dados que precisa dele para vc testar o comportamento do outro metodo que depende desse indice, entendeu!?

Se quiser seguir essa linha, mude a variável icIndiceCriado para estática.