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

Erros em Serviços

Erros em Serviços

Para este FAQ considere a seguinte a seguinte amostra de código

  @Test
  public class TesteDeServicoProduto extends TesteDeIntegracaoWeb {

    private final String URL = "api/bd/produto";

    public void usuarios_nao_autenticados_nao_devem_listar_itens() {
      WebResponse response = webClientOf(URL).get();

      assertThat(response.status(), equalTo(HttpServletResponse.SC_UNAUTHORIZED));
    }

    public void usuarios_autenticados_devem_listar_itens() {
      Map<String, String> cookies = login("alberto");

     WebResponse response = webClientOf(URL, cookies).get();
     assertThat(response.status(), equalTo(HttpServletResponse.SC_OK));

     List<String> res = new ToTableRow(response).get();
     assertThat(res.size(), equalTo(2));
     assertThat(res.get(0), equalTo("Produto Código Promoção"));
     assertThat(res.get(1), equalTo("Pizza PIZ true"));
     assertThat(res.get(2), equalTo("Refrigerante REF false"));
   }

}

Erros Comuns

Erro 404: A URL foi definida corretamente ?

Verifique se no inicio da classe de teste a URL foi definida corretamente, sem nenhum / no inicio

@Test
  public class TesteDeProduto extends TesteDeIntegracaoWeb {

  private final String URL = "api/bd/produto";
}

Caso contrário o seguinte stacktrace aparecerá:

Primeiro teste:

java.lang.AssertionError: 
Expected: <200>
got: <404>

  at br.com.objectos.dojo.TesteDeServicoProduto.usuario_autenticados_devem_listar_itens(TesteDeServicoProduto.java:42)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

Segundo teste:

java.lang.AssertionError: 
Expected: <401>
got: <404>

  at br.com.objectos.dojo.TesteDeServicoProduto.usuarios_nao_autenticados_nao_devem_listar_itens(TesteDeServicoProduto.java:35)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

Assim percebemos que o erro estava na URL que foi definida no teste

private final String URL = "/api/bd/produto";

Portanto é só remover a barra no inicio da URL

BindException: Address already in use - O Jetty ou o jekyll estão sendo utilizados no terminal ?

Verifique no terminal se o Jetty ou o jekyll estão em uso, se sim o seguinte stacktrace aparecerá

java.net.BindException: Address already in use
  at sun.nio.ch.Net.bind(Native Method)
  at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:126)
  at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:59)
  at org.eclipse.jetty.server.nio.SelectChannelConnector.open(SelectChannelConnector.java:172)
  at org.eclipse.jetty.server.AbstractConnector.doStart(AbstractConnector.java:300)

De acordo com o stacktrace a exceção ocorre por conta das aplicações em uso no terminal, basta encerrá-las para que o problema seja resolvido.

Erro 401: O login fornecido no teste está correto ?

Verifique se o login fornecido no teste está correto

public void usuarios_autenticados_devem_listar_itens() {
  Map<String, String> cookies = login("alberto");

  WebResponse response = webClientOf(URL, cookies).get();
  assertThat(response.status(), equalTo(HttpServletResponse.SC_OK));
}

Caso contrário, o seguinte stacktrace aparecerá:

java.lang.AssertionError: 
Expected: <200>
got: <401>

  at br.com.objectos.dojo.TesteDeIntegracaoWeb.login(TesteDeIntegracaoWeb.java:98)
  at br.com.objectos.dojo..TesteDeIntegracaoWeb.login(TesteDeIntegracaoWeb.java:91)

De acordo com o stacktrace o erro 401, ocorrerá exatamente na linha onde foi fornecido o login na classe de teste

public void usuario_autenticados_devem_listar_itens() {
  Map<String, String> cookies = login("alberto");
}

Caso o login estiver incorreto, basta substituir o mesmo pelo login correto.

Erro com html: Conceitos de JavaBeans

Em alguns casos, você pode se deparar com um erro em uma tabela html, com o seguinte StackTrace:

[Near : {... dto.promocao ....}]
             ^
[Line: 1, Column: 1]
at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.getBeanProperty(ReflectiveAccessorOptimizer.java
at org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer.compileGetChain(ReflectiveAccessorOptimizer.java

Isto acontece quando o método não utiliza os conceitos de JavaBeans , ou seja, este método está com a assinatura boolean promocao(); ao invés de boolean isPromocao();.

Isto se aplica também aos tipos diferentes de boolean (int, Object, long, etc). Porém, a assinatura destes métodos devem ser getNomeDoMetodo();

Importante: Apesar das convenções da Oracle aceitar a assinatura get para tipos boolean , algumas frameworks podem não funcionar corretamente, por esta razão, sempre utilize isNomeDoMetodo para boolean.

Leia mais sobre JavaBeans aqui.


 
 

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