Pessoal li a documentação sobre teste do vraptor usando o junit mais ficou um pouco vaga a ideia…
queria fazer uns tests cases dos meus controllers…
alguem poderia postar um exemplo completo de teste pra mim…
Ou algum exemplo com esse controller dai me viro com o resto num to sabendo começar…
Se você for criar testes unitários pra essa classe (ou pra uma classe em geral) você tem que pensar no seguinte:
sua classe possui duas dependências: EstadoDao e Result
para testar essa classe, vc precisa instanciá-la, passando as dependências pelo construtor.
Em geral não passamos as implementações de verdade, passamos uma implementação controlada, que pode tanto ser uma classe nova da sua aplicação, quanto um mock. Para criar mocks vc usa outros frameworks, como o Mockito (mockito.org) ou JMock(jmock.org)
Para a classe Result, o VRaptor já disponibiliza uma implementação falsa que só ignora as chamadas, acumulando os objetos incluidos, essa classe é a MockResult.
Se você for criar testes unitários pra essa classe (ou pra uma classe em geral) você tem que pensar no seguinte:
- sua classe possui duas dependências: EstadoDao e Result
- para testar essa classe, vc precisa instanciá-la, passando as dependências pelo construtor.
- Em geral não passamos as implementações de verdade, passamos uma implementação controlada, que pode tanto ser uma classe nova da sua aplicação, quanto um mock. Para criar mocks vc usa outros frameworks, como o Mockito (mockito.org) ou JMock(jmock.org)
- Para a classe Result, o VRaptor já disponibiliza uma implementação falsa que só ignora as chamadas, acumulando os objetos incluidos, essa classe é a MockResult.
Entendi em partes sobre a implementação falsa estou fazendo o teste mas pelo que vi JMock por exemplo faz implementações falsas de interface apenas mas meu EstadoDao é um classe ai vi que tem um modo de fazer mocks de classes, mas mesmo assim ainda nao entendi bem a ideia... vo postar um exemplo de teste
pra ver se voce me ajuda....
Mas levo esse erro
unexpected invocation: estadoDao.listaTodos()
no expectations specified: did you...
- forget to start an expectation with a cardinality clause?
- call a mocked method to specify the parameter of an expectation?
what happened before this: nothing!
at org.jmock.internal.InvocationDispatcher.dispatch(InvocationDispatcher.java:56)
at org.jmock.Mockery.dispatch(Mockery.java:218)
at org.jmock.Mockery.access$000(Mockery.java:43)
at org.jmock.Mockery$MockObject.invoke(Mockery.java:258)
at org.jmock.internal.InvocationDiverter.invoke(InvocationDiverter.java:27)
at org.jmock.internal.FakeObjectMethods.invoke(FakeObjectMethods.java:38)
at org.jmock.lib.legacy.ClassImposteriser$4.invoke(ClassImposteriser.java:137)
at br.com.jslsolucoes.granchef.dao.EstadoDao$$EnhancerByCGLIB$$e9a2f3bd.listaTodos()
at br.com.jslsolucoes.granchef.controllers.EstadoController.lista(EstadoController.java:25)
at br.com.jslsolucoes.granchef.tests.EstadoTests.testList(EstadoTests.java:39)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at junit.framework.TestCase.runTest(TestCase.java:168)
at junit.framework.TestCase.runBare(TestCase.java:134)
at junit.framework.TestResult$1.protect(TestResult.java:110)
at junit.framework.TestResult.runProtected(TestResult.java:128)
at junit.framework.TestResult.run(TestResult.java:113)
at junit.framework.TestCase.run(TestCase.java:124)
at junit.framework.TestSuite.runTest(TestSuite.java:232)
at junit.framework.TestSuite.run(TestSuite.java:227)
at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
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)
Essas expectations seria o que?? Pq meu EstadoDao precisa de uma Session do hibernate como dependencia pra funcionar..se não for muito incomodo
La que voce fala como voce espera que seus mocks devem agir em determinadas situacoes.
algo como:
Estado SP = new Estado("Sao Paulo");
final List<Estado> listaDeEstados = Arrays.asList(SP, RJ, BLA);
context.checking(new Expectations() {{
oneOf (dao).listaTodos();
will(returnValue(listaDeEstados));
}});
Hum vi a implementação que estava usando era relativa ao JMock enquanto o lucas deu exemplo sobre o mockito usei o exemplo do mockito e rolou o teste..
EstadoDao dao = mock(EstadoDao.class);
MockResult result = new MockResult();
EstadoController controller = new EstadoController(dao,result);
controller.lista();
List<Estado> estados = result.included("estadoList");
Assert.assertNotNull(estados);