Bom dia pessoal.
Venho desenvolvendo um sistema com o Google Appengine, e estou começando a estudar TDD e tentando implantar os testes em meu sistema. O problema é que o Appengine tem algumas particularidades relacionadas aos serviços que disponibiliza, principalmente a persistência de dados, e para se realizar testes unitários do armazenamento existem alguns procedimentos a se executar, descritos em http://code.google.com/intl/pt-BR/appengine/docs/java/howto/unittesting.html.
Seguindo o passo-a-passo, escrevi minha classe de teste, como segue:
package br.com.perludum.controleveiculos.dao;
import com.google.appengine.api.datastore.DatastoreServiceFactory;
import com.google.appengine.api.datastore.Query;
import com.google.appengine.api.users.User;
import br.com.perludum.controleveiculos.LocalDatastoreTestCase;
import br.com.perludum.controleveiculos.entidades.Usuario;
public class UsuarioDAOTeste extends LocalDatastoreTestCase {
UsuarioDAO usuarioDAO = new UsuarioDAO();
public void testAdiciona() throws Exception {
User user = new User("email@teste.com", "teste.com");
Usuario usuario = new Usuario();
usuario.setContaGoogle(user);
usuario.setNome("Tiago");
usuario.setSobrenome("Santos");
usuarioDAO.adiciona(usuario);
try {
Query query = new Query( Usuario.class.getSimpleName() );
assertEquals(2, DatastoreServiceFactory
.getDatastoreService()
.prepare( query )
.countEntities());
} catch (Exception e) {
e.printStackTrace();
}
}
}
Ao executar recebo o seguinte erro:
java.lang.NullPointerException
at com.google.appengine.api.NamespaceManager.get(NamespaceManager.java:98)
at com.google.appengine.api.datastore.DatastoreApiHelper.getCurrentAppIdNamespace(DatastoreApiHelper.java:85)
at com.google.appengine.api.datastore.DatastoreApiHelper.getCurrentAppIdNamespace(DatastoreApiHelper.java:77)
at com.google.appengine.api.datastore.Query.<init>(Query.java:70)
at br.com.perludum.controleveiculos.dao.UsuarioDAOTeste.testAdiciona(UsuarioDAOTeste.java:33)
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 junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at junit.framework.TestSuite.runTest(TestSuite.java:208)
at junit.framework.TestSuite.run(TestSuite.java:203)
at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
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)
Já pesquisei muito na net, já fiz vários testes e nada de conseguir resolver isso. Alguém aqui sabe me dizer o que pode estar acontecendo? E alguém aqui sabe de algum artigo mais detalhado de como se fazer testes com o armazenamento de dados do Appengine?