Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Есть ли какой-нибудь инструмент покрытия "утверждения" (для Java)?

Автор вопроса: Danilo TommasinaОтветов: 3

Прежде чем этот вопрос будет помечен как дубликат, прочтите его. ;) Уже есть несколько вопросов об инструментах покрытия и тому подобном, однако это немного отличается от обычных (надеюсь).

Согласно Википедии, существует несколько различных вариантов "покрытия", которые затрагивают несколько различных аспектов термина "покрытие". .

Вот небольшой пример:

public class Dummy {
    public int a = 0;
    public int b = 0;
    public int c = 0;

    public void doSomething() {
        a += 5;

        b += 5;

        c = b + 5;
    }
}

public class DummyTest {

    @Test
    public void testDoSomething() {
        Dummy dummy = new Dummy();

        dummy.doSomething();

        assertEquals( 10, dummy.c );
    }
}

Как вы можете видеть, тест будет иметь покрытие 100% строк, утверждение о значении поля "c" будет охватывать это поле и косвенно также охватывать поле "b", однако в поле "a" нет покрытия утверждения. . Это означает, что тест покрывает 100% строк кода и гарантирует, что c содержит ожидаемое значение и, скорее всего, также b содержит правильное, однако a вообще не утверждается и может иметь совершенно неправильное значение.

Итак... теперь вопрос: есть ли инструмент, способный анализировать код (java) и создавать отчет о том, какие поля/переменные/что-то еще не были (прямо и/или косвенно) покрыты утверждением?

(хорошо, при использовании геттеров вместо общедоступных полей вы увидите, что getA() не вызывается, но это не тот ответ, который я хотел бы услышать;))

  • Итак... вы ищете какой-нибудь инструмент для охвата потока информации? Это было бы действительно полезно, хотя я не знаю ни одного случайного. Иметь +1. Donal Fellows 11.05.2011
  • да, так как я ленивый ;) Я бы хотел что-то, что говорит мне, эй, ты забыл проверить значение поля XY в классе YZ. Danilo Tommasina 11.05.2011

javacode-coverage

Ответы

Ответ 1 · рейтинг 2 · Don Roby

Что ж, "обложка", к сожалению, означает разные вещи для разных людей... Этот тест действительно упражняет 100% строк кода, но он не тестирует их все.

То, что вы ищете, хорошо обрабатывается мутационным тестированием.

Взгляните на Jester, который использует мутационное тестирование для отчета о покрытии кода.

Ответ 2 · рейтинг 1 · Ira Baxter

Существуют сотни определений "покрытия тестами", из которых COTS-инструменты в лучшем случае обрабатывают лишь очень немногие. (Моя компания создает инструменты тестового покрытия, поэтому мы отслеживаем такие вещи). См. эту лекцию о покрытии тестами, где представлен интересный обзор. .

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

Я не знаю сотни определений наизусть, но вы, возможно, придумали еще одно: покрытие данных, ограниченное утверждениями.

Ответ 3 · John Kane

в Java есть утверждения, если это то, что ты ищешь.

Чтобы увидеть, сколько кода было обработано, есть инструменты, которые вы можете использовать, вот несколько примеров: cobertura клевер

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы