Problemas com JUnit e um arquivo .properties

PERGUNTA :::::: :roll: :roll: :roll:
Tem como eu quebrar todos os processos ou ligações que estão utilizando um arquivo (File)? Algum comando, sei lá… não achei nada na API.

:?: Porque da pergunta…

:!: …Pessoal, possuo uma aplicaçãozinha aqui que utiliza arquivos ‘.properties’ para montar as consultas no banco, esse properties armazena os trechos dos selects que serão utilizados pela aplicação. Para que a aplicação possa utilizar esse arquivo properties você deve colocá-lo em uma pasta local da máquina na sua raiz, isso até agora é feito de forma manual (Ctrl + C / Ctrl + V).

Buenas, estou montando JUnits para realizar testes totalmente automatizados diretamente no servidor, estes testes serão rodados pelo programa Hudson, sem interação alguma de ninguem… (no caso o hudson apresenta um alarme caso algum junit tenha rodado com problemas ou ‘quebrado’). Então, se observarem, eu preciso colocar o arquivo ‘.properties’ automaticamente no local necessario, observando os seguintes aspectos: caso não exista a pasta eu para inserção do propertie, eu crio ela coloco o .properties lá dentro e no final do teste tenho que deletar tal pasta, deixando tudo como estava antes. Tenho que observar várias abordagens… tipo, se não existe o caminho onde deve ser colocado o arquivo ‘.properties’, se existe o caminho mas não o arquivo e se existe o caminho e o arquivo. No momento estou configurando o arquivo .properties no setUp e “desconfigurando” ele no tearDown. A principio tudo acima esta funcionando.

PORÉÉÉÉMMMMM…
Tenho problemas quando o caminho e o arquivo já existem… como tudo deve voltar ao estado que estava antes… minha metodologia utilizada foi… no metodo que configura o ‘.properties’ (no setUp eu chamo este metodo) eu crio um bkp do arquivo na pasta mesmo (utilizando um remaneTo()) e copio o arquivo ‘.properties’ que deverá ficar lá para rodar o teste. Ao final do teste (tearDown) eu chamo o metodo que “desconfigura” meu arquivo ‘.properties’ deletando o que esta sendo usado pelos testes e ‘renomendo’ (uso um metodo com FileInputStream e FileOutputStream) de volta para tudo ficar conforme o estado original.
PARA ALGUNS TESTES ESSA METODOLOGIA FUNCIONA NORMALMENTE, TIPO CONFIGURA O PROPERTIES E DESCONFIGURA… PORÉM EM OUTROS JUNITS NÃO… tipo o arquivo é properties é configurado mas na hora de desconfigura-lo não estou conseguindo deletá-lo diretamente pela aplicação, como se ela pelo teste ainda estivesse utilizando ele.

Obrigado desde já!
Rafael Moreira

Crie um mock ou uma classe que simule o properties para utilizar nos seus testes, pois o objetivo e´testar a logica de negocio delas e um bom design devera abstrair a obtencao dessas propriedades.

Sua abordagem e´ muito complexa e sucetivel a erro, como ja vem ocorrendo esse sistema agora.

Cara a abordagem não é minha, concerteza não teria feito tal lambança. Mesmo um simples principiante percebe que a forma que está organizada a arquitetura deste sistema percebe que ele tende diretamente ao erro.

Não estou testando o meu arquivo ‘.properties’ este já é testado em outra camada (persistencia, se é dá pra chamar deste nome).

Meu problema é quanto a usabilidade deste arquivo…

Por exemplo… sabemos que a cada metodo de teste é rodado um setUp antes e um tearDown depois… a pergunta é quando estao rodando os metodos por exemplo é desta forma que acontece os testes…

começou a rodar a classe de testes…

setUp(); // metodo 1
metodo1()…
tearDown(); // metodo 1

setUp(); //metodo 2
metodo2()…
tearDown(); //metodo 2

setUp(); //metodo 3
metodo3() …
tearDown(); //metodo 3

terminou de rodar a classe de testes;

Ou será que é desta forma…

começou a rodar a classe de testes…

setUp(); // metodo 1
metodo1()…

setUp(); //metodo 2
metodo2()…
tearDown(); // metodo 1

setUp(); //metodo 3
metodo3() …
tearDown(); //metodo 3
tearDown(); //metodo 2

terminou de rodar a classe de testes;

… Tipo meio bagunçado.

Alguém sabe a forma de execução??
Porque se for meio bagunçado minha questao esta resolvida…