Покрытие line ваших операторов Java assert
должно быть просто покрыто запуском вашего набора тестов с включенными утверждениями, то есть, указав -ea в качестве аргумента для jvm.
Если вы сделаете это, вы увидите, что cobertura легко сообщает о 100% покрытии линии , если покрыты и остальные ваши линии.
Тем не менее, линии assert
будут по-прежнему окрашены в красный цвет, что указывает на недостаточный охват.
Это потому, что ваши утверждения обычно всегда верны, поэтому вы никогда не попадете в ложную ветвь
Таким образом, покрытие ответвление в Кобертуре портится с помощью assert
, поскольку линии подтверждения будут иметь 50% охвата переходов, что затрудняет интерпретацию (или бесполезность) общего процента покрытия переходов. *
Clover имеет замечательную функцию, которую можно игнорировать assert
при расчете покрытия. Я не видел эту функцию ни в одном инструменте покрытия Java с открытым исходным кодом.
Если вы используете утверждения в стиле с дизайном по контракту , нет необходимости добавлять тесты, которые приводят к сбою ваших операторов Java assert
. По сути дела,
для многих утверждений (например, инвариантов, постусловий) вы даже не можете создавать объекты, которые могут привести к их провалу, поэтому невозможно писать такие тесты.
Однако вы можете использовать инварианты / постусловия для получения тестовых случаев, использующих их границы - см. Шаблон инвариантных границ Роберта Биндера. Но это не сделает ваши утверждения несостоятельными.
Только если у вас есть очень сложное предварительное условие для данного метода, вы можете рассмотреть возможность написания теста, направленного на то, чтобы выполнить предварительное условие неуспешно. Но тогда лучше подумать о своем предварительном условии.