Olá pessoal.
Estou começando a utilizar JMock + JUnit para criação dos meus testes unitários, porém ainda não consegui entender o fundamento completo da utilização de mocks.
Abaixo eu coloco uma classe de teste que implementei para realizar testes para um serviço que tenho no meu sistema. Este serviço por sua vez utiliza uma instância do EntityManager que foi injetada pelo contexto do Spring.
Por isso comecei a utilizar o JMock, ou seja, para que eu não precise me preocupar com EntityManager e fazer meus testes independentemente de o sistema estar conectado ao banco ou não.
Porém mesmo com a classe abaixo, eu não consegui entender o quanto isso prova que meu serviço realmente é válido durante o teste. Principalmente considerando o método gravarUsuario(), pois para que um usuário seja válido na gravação é necessário que uma série de atributos estejam preenchidos como login, senha e etc.
Alguém poderia me ajudar a entender melhor este cenário?
Obrigado.
public class CadastroUsuarioServiceTest {
JUnit4Mockery context = new JUnit4Mockery() {{
setImposteriser(ClassImposteriser.INSTANCE);
}};
EntityManager em = context.mock(EntityManager.class);
CadastroUsuarioServiceImpl service;
@Before
public void setUp() {
service = new CadastroUsuarioServiceImpl();
service.setEm(em);
}
@After
public void tearDown() {
service = null;
}
@Test
public void recuperarUsuario() {
final Usuario usuario = new Usuario();
context.checking(new Expectations(){{
oneOf(em).find(Usuario.class, 20L);
will(returnValue(usuario));
}});
service.recuperarUsuario(new Long(20));
context.assertIsSatisfied();
}
@Test
public void gravarUsuario() throws CadastroException {
final Usuario usuario = context.mock(Usuario.class);
context.checking(new Expectations() {{
ignoring(usuario).setDataCadastro(with(any(Date.class)));
ignoring(usuario).setFlAtivo(with(any(Boolean.class)));
oneOf(em).persist(usuario);
oneOf(em).close();
}});
service.gravarUsuario(usuario);
context.assertIsSatisfied();
}
}