Perguntas mais freqüentes

P. O que faz com que uma linha seja parcialmente coberta (mostrada com um indicador amarelo)?

R. Uma linha será indicada como parcialmente coberta se nem todas as ramificações através do código são executadas.

A seguir há dois exemplos:

  1. Manipuladores de exceção:

  2. try {
    methodA() // methodA throws Exception
    } catch (Exception e) {..}

    A linha que chama methodA é parcialmente coberta porque existem dois caminhos: uma exceção é lançada e capturada ou uma exceção não é lançada e o programa executa normalmente. No caso em que a exceção não é lançada, a cobertura parcial é indicada porque a captura nunca é executada.

  3. Código de construtor compartilhado:
  4. No exemplo acima, a linha 4 está marcada como parcialmente coberta. Note que o código de inicialização da variável da instância é executado independentemente de qual construtor seja usado para criar a instância do objeto. O compilador coloca o código de inicialização em ambos os construtores. O código acima é, portanto, aproximadamente equivalente a:

    Como somente usamos um construtor, o outro caminho de execução não é executado e a cobertura parcial é indicada.

P. Nos relatórios de cobertura de código, por que as linhas totais relatadas para um pacote nem sempre são iguais aos totais mostrados para as classes nesse pacote?

R. Quando relatamos as linhas totais em um pacote, calculamos quaisquer linhas compartilhadas entre métodos para que elas não sejam contabilizadas duas vezes.

P. Por que as definições de classe (por exemplo, a classe pública Foo {..}) são indicadas como não cobertas (vermelhas) ou parcialmente cobertas (amarelas)?

R. Se a sua classe não tem um construtor padrão explícito, o compilador gerará um para você e, como ele é implícito, ele pode ser associado à essa linha de código. Em segundo lugar, se você tem um código de inicialização estático (por exemplo, campos estáticos), o compilador gera blocos de inicialização estáticos que também podem ser associados à essa linha.

P. Por que os indicadores de cobertura no Package Explorer aparecem em vermelho mesmo se a porcentagem coberta excede o nível de coberta aceitável?

R. Quando mais de um critério de aceitação é definido (por exemplo, método E bloco), o indicador será exibido em vermelho se qualquer um dos critérios não for correspondido. Os critérios de aceitação são definidos por meio da seleção das propriedades de cobertura de código e depois pela ativação de indicadores e porcentagens. Os indicadores de porcentagem exibidos são definidos pela seleção das preferências da cobertura de código e então pela ativação dos indicadores (método, bloco, etc.). A cor será determinada pelos critérios definidos na página de propriedades e não na página de preferências.

P. Quais linhas não são contadas na Cobertura de Código?

R. As seguintes linhas não são contadas como cobertas, não cobertas ou parcialmente cobertas e não são usadas para calcular a porcentagem coberta:

P. O que significa blocos em cobertura de bloco?

R. Uma unidade executável começa no início de cada bloco básico, e em cada código de byte cujo número da linha de origem seja diferente do código de byte anterior. Um bloco básico é uma região de instruções do código de byte que não podem ser ramificadas para fora ou para dentro. Quando a primeira instrução em um bloco básico é executada, todas as instruções são executadas, para que sejam consideradas como um único grupo.

Blocos básicos terminam com instruções como branch, call, throw e return.

P. Por que quando depuro aplicativos habilitados para cobertura de código, o depurador avança para llc_probe.class em vez de para o método esperado?

R. Isso deve-se à maneira como os dados da cobertura de código são coletados. Uma solução alternativa para isso é usar os filtros de etapa: