Вопрос по eclipse, eclemma, java, code-coverage, emma – Может ли полностью покрытый код иметь рейтинг покрытия EclEmma менее 100%?

5

Я просто написал несколько простых примеров кода, чтобы убедиться, что EclEmma установлена правильно. Я не получаю 100% покрытия, и я не понимаю, почему. Выделение подразумевает, что это связано с именем класса. Вот мой код с соответствующими тестами JUnit, как это подчеркнул EclEmma:

Arithmetic class

Tests for Arithmetic class

Результаты охвата показывают, что три инструкции вArithmetic не получают удар, хотя оба фактических метода, кажется, полностью покрыты:

Coverage information

Я прочиталдокументация EclEmma об основном покрытии блоков, но я все еще в замешательстве. Я не уверен, какие базовые блоки пропущены. Сначала я думал, что EclEmma может просто игнорировать байт-код для классов, ноArithmeticTest кажется, обрабатывается просто отлично.

У меня есть два тесно связанных вопроса:

Does this indicate a problem with the way I installed/configured EclEmma? Is it normal/acceptable for fully covered code to have a high-but-not-quite-100% EMMA coverage rating, and if so, how does that work?

Ваш Ответ

3   ответа
9

который Эмма не может правильно пометить, потому что он не имеет блока текста.

Поскольку он не помечен надлежащим образом в текстовом блоке, Эмма не может связать регистрацию покрытия с текстовым файлом, и похоже, что некоторый код не охватывается; потому что вы запустили некоторый байт-код, но регистрация строк не может быть зарегистрирована. Позже, когда отчетный элемент считывает запись строки, они не могут найти номера строк для конструктора по умолчанию, и это высвечивает ошибку в единственном месте, которое имеет смысл, - строке объявления класса.

Конструктор по умолчанию выглядит так

public Arithmetic() {
  super();
}

Где супер это подразумеваемая первая инструкция, которая создастObject, Хотя вы можете опустить его наличие, компилятор добавит его для вас. Вот где вы получаете "3 строки" вместо одного.

Фактически, он имеет «блок текста», он просто пустой. В байт-коде присутствует конструктор по умолчанию, в строке, помеченной красным EclEmma. Чтобы покрыть это и иметь зеленый цвет, тесту просто нужно вызвать конструктор:new Arithmetic(), Конечно, правильной вещью здесь было бы объявитьprivate конструктор по умолчанию в классе.
4

Arithmetic либо объявите его конструкторprivate запретить создание

Ах, тестирование конструктора делает это. EclEmma не так уж и счастлива с частным конструктором, но я думаю, что помню где-то обходной путь. Pops
2

вам нужно создать экземпляр класса, чтобы использовать предоставленный языком конструктор.

Похожие вопросы