Покрытие Cobertura и ключевое слово assert - PullRequest
6 голосов
/ 14 февраля 2011

Мое покрытие линии для модульных тестов, измеренных Cobertura, страдает, потому что у меня есть assert утверждения, которые не охватываются тестами.Должен ли я тестировать assert ионов, и есть ли способ заставить Cobertura игнорировать их, чтобы они не влияли на мое тестовое покрытие?

Ответы [ 4 ]

6 голосов
/ 26 июня 2011

Покрытие line ваших операторов Java assert должно быть просто покрыто запуском вашего набора тестов с включенными утверждениями, то есть, указав -ea в качестве аргумента для jvm. Если вы сделаете это, вы увидите, что cobertura легко сообщает о 100% покрытии линии , если покрыты и остальные ваши линии.

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

Таким образом, покрытие ответвление в Кобертуре портится с помощью assert, поскольку линии подтверждения будут иметь 50% охвата переходов, что затрудняет интерпретацию (или бесполезность) общего процента покрытия переходов. *

Clover имеет замечательную функцию, которую можно игнорировать assert при расчете покрытия. Я не видел эту функцию ни в одном инструменте покрытия Java с открытым исходным кодом.

Если вы используете утверждения в стиле с дизайном по контракту , нет необходимости добавлять тесты, которые приводят к сбою ваших операторов Java assert. По сути дела, для многих утверждений (например, инвариантов, постусловий) вы даже не можете создавать объекты, которые могут привести к их провалу, поэтому невозможно писать такие тесты. Однако вы можете использовать инварианты / постусловия для получения тестовых случаев, использующих их границы - см. Шаблон инвариантных границ Роберта Биндера. Но это не сделает ваши утверждения несостоятельными.

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

4 голосов
/ 26 августа 2011

Запрос (1959691) уже зарегистрирован в Cobertura, чтобы добавить возможность игнорировать строки утверждений;не стесняйтесь смотреть его, если они реализуют и добавят комментарий на страницу, если вы считаете, что это хорошая идея.Жаль, что ни один из инструментов покрытия с открытым исходным кодом пока не поддерживает это, так как я определенно думаю, что утверждения assert - хорошая идея, но их тестирование обычно не практично / невозможно.

3 голосов
/ 21 февраля 2011

Покрытие кода - это инструмент, который позволяет вам улучшить тестирование, но это не своего рода доказательство достоверности ваших тестов. Вы получаете от этого пользу, стремясь к 100% охвату кода, изучая то, что не покрывается, и размышляя о том, как улучшить свои тесты.

Обнаружение, что есть открытые операторы assert, является лишь примером, где вы должны вызвать: «Хорошо, нет необходимости покрывать это». Аналогичные примеры для этого - трассировка макросов и кода отладки, который добавляет скрытые операторы «if», которые никогда не рассматриваются.

Полагаю, что вам не нравится в вашем ответе то, что вы хотели бы иметь минимальное требование покрытия кода для своего кода; Я столкнулся с той же проблемой с некоторыми из моих проектов. Если один должен не потерять данные покрытия, одним из решений является создание "покрытия покрытия", при котором проблемные операторы (утверждение, трассировка и т. Д.) Заменяются пустыми (скажем, с помощью макроса или магии компоновщика). Но я считаю, что это обычно лучший компромисс, если принять неидеальное покрытие.

Удачи.

2 голосов
/ 14 февраля 2011

Предположительно, вы используете утверждения для проверки предварительных условий или некоторого другого набора условий. Подумайте, похожа ли ваша ситуация на Аргумент Исключения должны проверяться модулем .

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

Да, конечно, проверь их. Ваши утверждения сами по себе являются логикой ваших предположений, и хорошо бы проверить, что ваши защитные заявления предотвращают / защищают сценарии, которые, как вы думаете, они делают.

...