Pergunta

Eu estou usando o Maven (2) Cobertura plug-in para criar relatórios sobre a cobertura de código, e eu tenho o seguinte esboço Eu estou usando em um método:

try {
    System.exit(0);
} catch (final SecurityException exception) {
    exception.printStackTrace();
}
System.err.println("The program never exited!");

Eu sei que eu preciso para registrar a exceção, etc, mas isso não é o ponto agora ... Cobertura se recusa a reconhecer que a linha após o rastreamento de pilha é impresso é coberto. Ou seja, não está sendo mostrado a linha com o '}' antes da instrução System.err.println como coberta. Antes, não estava a ser mostrado o terminando chaveta do método como coberto, por conseguinte, a instrução System.err. Alguma idéia de como posso convencer cobertura do Maven plugin que, desde a declaração System.err.println é coberto, que acabar com a cinta tem que ter sido coberto?

Oh yeah, e eu uso um gerente de segurança simulada para lançar a exceção de segurança, já que é a maneira mais fácil que eu encontrei de fazer o teste continuar a executar após a chamada System.exit.

Foi útil?

Solução

Eu não usei Cobertura em quando (2005?), E vi esse comportamento naquela época. Um problema semelhante existe com NCover para C # e chaves seguinte de captura / finalmente blocos.

A minha sugestão seria para adicionar à este relatório de bug Cobertura detalhando uma questão similar. Além disso, siga @ conselho de tvanfosson e perceber não ter cobertura em uma chaveta, que na verdade não se tornar qualquer coisa na JVM, é algo que você pode ignorar como 'ruído'.

Outras dicas

Eu olhava para o relatório de cobertura. Verifique meus testes. Observe que o código realmente está sendo coberto e não se preocupar sobre bater 100%. cobertura de código é mais usado para encontrar áreas que você pode ter esquecido de sucesso com seus testes, mas apenas se concentrar em obter uma cobertura de 100% como uma meta é mau hábito que pode levar a você pular testes que precisam ser escritos apenas porque seus programas ferramenta 100%. Use a ferramenta para o que ele pode fazer, mas não caia na armadilha de deixar a ferramenta definir o que você faz.

No formato classfile Java cada método é anotado com uma tabela offsets código de mapeamento para os números de linha. Neste caso, a chave de fechamento não produz qualquer bytecode, portanto, não é coberto. Esta é uma questão de correspondência imperfeita entre a origem eo bytecode. Ele deve ser tratado pela ferramenta de cobertura, reconhecendo esta linha como não-código.

Eu sei que Emma tem problemas semelhantes. Clover tarifas muito melhor, mas é comercial (não tenho certeza se ele iria lidar com este caso também) . Se você usa o IDEA, você deve tentar a sua implementação -., é muito bom e em desenvolvimento ativo

Eu sei que isto é uma questão antiga e que Cobertura já fixou este, mas para a integralidade da cobertura em falta no "}" foi causado pela interna automaticamente "finalmente" bloco.

Veja seu código como este:

try {
    System.exit(0);
} catch (final SecurityException exception) {
    exception.printStackTrace();
} finally {
    // noop
}

Felizmente, este não é mais acontecendo para algumas versões.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top