Pessoal,
Não sei se posso utilizar o junit para testes para Web, mas eu acredito que sim, é que no projeto que peguei aqui não tem nenhum.
Bem, eu preciso fazer uma manutenção grande e preferi separar parte do código que gera uma linha de inserção no banco de dados para uma classe de Factory, a CalculoFactory, dessa forma eu poderia manter a funcionalidade do projeto somente devolvendo uma classe CalculoBean e também fazer testes com a mesma.
Porém quando executo o teste ele me retorna o seguinte erro:
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at br.com.athos.persistence.ConnectionFactory.getConnection(ConnectionFactory.java:31)
at br.com.athos.persistence.AlocacaoPersistence.searchAlocacao(AlocacaoPersistence.java:367)
at br.com.athos.test.CalculoFactoryTest.testConstroiCalculoBean(CalculoFactoryTest.java:64)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Basicamente ele chama o método searchAlocacao da classe AlocacaoBean na linha 14 abaixo:
public void testConstroiCalculoBean() throws SQLException, ParseException {
CalculoFactory calculoFactory = new CalculoFactory();
SimpleDateFormat data = new SimpleDateFormat("dd/MM/yyyy");
data.parse(strData);
GregorianCalendar greg = new GregorianCalendar();
greg.setTimeInMillis(data.getCalendar().getTimeInMillis());
Timestamp Data = new Timestamp(greg.getTimeInMillis());
AlocacaoBean alocacao = alocacaoPersistence.searchAlocacao(
codempresa, matricula, Data);
E da erro na parte do getConnection.
public AlocacaoBean searchAlocacao(Integer codEmpresa, String matricula, Timestamp data) throws SQLException {
AlocacaoBean alocacaoBean = null;
Connection connection = ConnectionFactory.getConnection();
ResultSet rs = null;
Mais especificamente no (Context) new InitialContext().lookup(“java:comp/env”); do código abaixo.
public static Connection getConnection() {
Connection conn = null;
try {
/* TOMCAT */
Context ctx = (Context) new InitialContext().lookup("java:comp/env");
conn = ((DataSource) ctx.lookup("jdbc/sqlServerDB")).getConnection();
/* WebSphere
InitialContext context = new InitialContext();
conn = ((DataSource) context.lookup("jdbc/sqlServerDB")).getConnection();
*/
} catch (Exception e) {
e.printStackTrace(System.err);
}
return conn ;
}
Alguém sabe me dizer o que estou fazendo de errado nessa tentativa de utilizar o JUnit para me ajudar?
É o context que não posso depender do TomCat na hora de testar ou eu serei obrigado a criar classes que me retornem um objeto AlocacaoBean já pronto sem depender de acesso no Banco de dados?
Obrigado.