Bom dia a todos.
Estou tentando criar uma classe para teste unitário. A classe que estarei testando utiliza DAOS carregados pelo listener do meu web.xml. Portanto, eu estou com dificuldades para que meus objetos daos sejam instanciados pelo spring sem q a aplicação seja startada.
Estou seguindo a documentação do Spring Testing, mas está ocorrendo o seguinte erro:
Olá.
Tem que se ligar em duas coisas. Se voce colocar uma propriedade e um set, o autowire
vai ser BY_TYPE
Se você não colocar o set, definir a propriedade como protected e chamar
Então vai ser autowire BY_NAME pelo nome da propriedade.
Tem que ver qual a situação que você está usando, e se o spring vai conseguir
injetar esse dependencia ‘interesDAO’
F
fabiozoroastro
Fabio,
obrigado pela resposta. Bom eu começei a trabalhar com o spring ontem, e eu ainda não domino ele, portanto eu simplesmente copiei da documentação exemplos pra fazer funcionar, e está funcionando, agora no teste unitário estou com esse problema. Agora se o autowire vai ser BY_TYPE ou BY_NAME eu não sei o que é. Será q com essas informações que te passei teria como eu realizer o teste??
Meu applicationContext.xml:
BY_NAME = vai tentar achar um bean com o mesmo nome, exemplo o teu ‘interesDAO’.
BY_TYPE = vai tentar achar qualquer bean do mesmo tipo, na verdade tem que ser unico,
do tipo da classe declarada, no teu caso o
com.aix.gen.dao.InteresDAO
Tu pode fazer o seguinte:
Verificar se está carregando o applicationContext.xml
Usar a propriedade do tipo ‘interesDAO’ que seja privada e tenha um set. Mas assim não pode ter outro bean da classe
com.aix.gen.dao.InteresDAO nos teus contextos
Pois ele vai fazer um BY_TYPE
Ou, colocar essa mesma propriedade protected, com o mesmo nome do bean, no caso ‘interesDAO’ ,
tirar o set, e chamar o setPopulateProtectedVariables.
Assim ele vai fazer um BY_NAME
Tanto o 2 quanto o 3 tem que funcionar se ele leu direito o teu applicationContext.xml
F
fabiozoroastro
Fábio, valeu mesmo pela atenção. Vou continuar testando aqui, se eu conseguir eu te falo. Mto obrigado mais uma vez.
R
Rodrigo_Carvalho_Aul
O Spring fornece algumas classes para facilitar testes como AbstractDependencyInjectionSpringContextTests que faz injeção de dependencia na própria classe de teste e AbstractTransactionalDataSourceSpringContextTests que faz roolback pra manter estado do banco quando você quer testar integração com o banco.
E agora não está ocorrendo nenhum erro. Mas o meu interesDAO vem null. Eu acho que está carregando o meu xml certo sim. E na verdade o meu xml fica dentro de /WEB-INF/applicationContext.xml, mas como não encontrava nem F***. eu coloquei o arquivo na mesma pasta q a classe de Teste só pra eu testar mesmo…
Agluma dica?
Abraço.
F
fabiofalci
“applicationContext*”
Isso funciona?
Nunca usei, e fiz um test aqui e nao funcionou…
Tenta colocar o nome certinho.
F
fabiozoroastro
Oi Fabio.
Eu coloquei desta forma pq eu tb estava com problemas pra encontrar o applicationContext.xml, daí eu li que assim funcionava.
Olha só, o meu applicationContext.xml está dentro de WEB-INF. E se eu fizer:
returnnewString[]{"/WEB-INF/applicationContext.xml"};//ou:returnnewString[]{"WEB-INF/applicationContext.xml"};//Ou até mesmo se eu colocar o applicationContext.xml dentro do memso package da classe de teste:returnnewString[]{"applicationContext.xml"};
Ocorre um erro de fileNotFoundException. Então, já que você falou, que do jeito: applicationContext* não funciona tb, eu vou continuar tentando aqui… vlws!!!
F
fabiofalci
Tenta colocar na raiz do teu source
E carrega assim
String[] { “applicationContext.xml” };
F
fabiozoroastro
Ahhh muleque. Muitissimo obrigado pela ajuda viu.
Funcionou certim. Agora soh falta fazer carregar o arquivo que está em web-inf/applicationContext.xml ao invéz de pegar do Source.
Mas já está funcionando já Fábio. Valeu de novo cara!