Versão ALPHA! Este artigo está em versão 'Alpha' e, portanto, não foi ainda revisado corretamente

Erros em Serviços de Cache

Erros em Serviços de Cache

Para este FAQ considere a seguinte amostra de código

@Test
public class TesteDeServicoDeCacheDeCliente extends TesteDeIntegracaoWeb {

  private static final String URL = "api/admin/cache/cliente";

  @Inject
  private CacheDeCliente cache;

  public void servico_deve_invalidar_cache() {
    ProdutoKey produtoKey = new ProdutoKey("PROD_1024");

    cache.porProduto(clienteKey);

    List<Long> antes = transform(cache.getStats(), new ToLoadSuccessCount());

    Map<String, String> cookies = login("admin");
    WebResponse response = webClientOf(URL, cookies).post("");
    assertThat(response.status(), equalTo(HttpServletResponse.SC_OK));

    cache.porProduto(clienteKey);

    List<Long> res = transform(cache.getStats(), new ToLoadSuccessCount());

    for (int i = 0; i < res.size(); i++) {
      assertThat(res.get(i), equalTo(antes.get(i) + 1));
    }
  }

}

Erros Comuns

java.lang.AssertionError:Expected: <2L> got: <1L>

Causa 1

Verifique em seu teste se o método webClientOf(URL, cookies).post("") está sendo chamado da maneira correta, não invocando outro método por engano, como:webClientOf(URL, cookies).get().

    Map<String, String> cookies = login("admin");
    WebResponse response = webClientOf(URL, cookies).post("");
    assertThat(response.status(), equalTo(HttpServletResponse.SC_OK));

Caso contrário o seguinte stacktrace aparecerá:

java.lang.AssertionError: 
Expected: <2L>
got: <1L>
at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:21)
  at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:8)
  at br.com.objectos.dojo.cache.TesteDeServicoDeCacheDeCliente.servico_deve_invalidar_cache(TesteDeServicoDeCacheDeCliente.java:70)

Assim percebemos que o erro estava na chamada incorreta ao método webClientOf(URL, cookies).post("").

Causa 2

Verifique na classe que corresponde a cache na qual o serviço invalida se a mesma foi anotada com @Singleton.

@Singleton
class CacheDeClienteGuice implements CacheDeCliente {
	
}

Caso contrário o seguinte stacktrace aparecerá:

java.lang.AssertionError: 
Expected: <2L>
got: <1L>
at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:21)
  at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:8)
  at br.com.objectos.dojo.cache.TesteDeServicoDeCacheDeCliente.servico_deve_invalidar_cache(TesteDeServicoDeCacheDeCliente.java:70)

Percebemos que o erro ocorria por conta da ausência da anotação @Singleton na cache.


 
 

objectos, Fábrica de Software LTDA

  • R. Demóstenes, 627. cj 123
  • 04614-013 - Campo Belo
  • São Paulo - SP - Brasil
  • +55 11 5093-8640
  • +55 11 2359-8699
  • contato@objectos.com.br