Статьи

Покрытие ваших тестов с Cobertura, JUnit, HSQLDB, JPA

Здравствуйте, как поживаете?

Давайте поговорим сегодня об очень полезном инструменте под названием «Кобертура». Этот фреймворк имеет те же функции, что и фреймворк Emma, ​​который мы видели в другом посте.

Основное различие между Кобертурой и Эммой в том, что Кобертура отображает страницу резюме с графикой.

Если вы хотите увидеть другие темы по этой теме, перейдите по ссылкам: Освещение тестов с помощью JUnit Ant и Emma // JUnit с HSQLDB, JPA и Hibernate // TDD — Первые шаги .

Я буду использовать тот же код из этого поста ( JUnit с HSQLDB, JPA и Hibernate ); Если вы хотите настроить среду для запуска кода, вы можете выполнить шаги, которые вы там найдете (исходный код для загрузки вы найдете в конце этой статьи).
Я не опытный пользователь Ant, и вы можете увидеть какой-то код и подумать «этот скрипт не хорош». Не стесняйтесь дать мне идеи о том, как «обновить» код муравья. 😉

Давайте загрузим библиотеки CoberturaDownload1.9.4.1

После завершения загрузки поместите файлы jar (/cobertura.jar, / lib / *, включая asm, jakarta, log4j) в папку lib нашего проекта.

В корневом каталоге нашего проекта создайте файл с именем «build.xml» со ​​следующим кодом ( созданный файл должен находиться в корневом каталоге вашего проекта, иначе ваш проект не будет работать ):

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
<project name="Cobertura Coverage" basedir=".">
  
    <!--  Project Source  Code -->
    <property name="src.dir" value="src" />
    <property name="build.dir" value="bin" />
    <property name="teste.dir" value="src/test" />
    <property name="lib.dir" value="lib" />
    <property name="report.dir" value="cobertura" />
  
    <!-- Project classpath -->
    <path id="project.classpath">
        <pathelement location="${bin.dir}" />
        <fileset dir="${lib.dir}">
            <include name="*.jar" />
        </fileset>
    </path>
  
    <!-- Tested Class -->
    <property name="DogFacadeTest" value="test.com.facade.DogFacadeTest" />
  
</project>

В приведенном выше коде мы создаем пути к исходным кодам и библиотекам. Давайте создадим задачу по удалению файлов, сгенерированных Cobertura, и скомпилированного исходного кода Java.

1
2
3
4
5
6
7
8
9
<!-- Clears the paths -->
<target name="01-CleannUp" description="Remove all generated files.">
    <delete dir="${build.dir}" />
    <delete file="cobertura.ser" />
    <delete dir="${report.dir}" />
  
    <mkdir dir="${build.dir}" />
    <mkdir dir="${report.dir}" />
</target>

Чтобы скомпилировать наш исходный код, добавьте приведенный ниже код и запустите задачу (убедитесь, что код скомпилируется):

1
2
3
4
5
6
7
<!-- Compiles the Java code -->
<target name="02-Compile" depends="01-CleannUp" description="invoke compiler">
    <javac debug="true" debuglevel="vars,lines,source" srcdir="${src.dir}" destdir="${build.dir}">
        <classpath refid="project.classpath" />
    </javac>
    <copy file="${src.dir}/META-INF/persistence.xml" todir="${build.dir}/META-INF" />
</target>

Давайте настроим Cobertura так, чтобы он мог инструктировать класс тестов и подготовить среду:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<!-- Cobertura configs -->
<property name="cobertura.instrumented-classes.dir" value="${report.dir}/instrumented-classes" />
<property name="cobertura.data.file" value="cobertura.ser" />
<path id="cobertura.classpath">
    <fileset dir="${lib.dir}" includes="/*.jar" />
</path>
  
<!-- Points to the cobertura jar -->
<taskdef classpath="${lib.dir}/cobertura.jar" resource="tasks.properties" classpathref="cobertura.classpath" />
  
<!-- Instruments the classes -->
<target name="03-Instrument" depends="02-Compile">
    <delete quiet="false" failonerror="false">
        <fileset dir="${cobertura.instrumented-classes.dir}" />
    </delete>
    <delete file="${cobertura.data.file}" />
    <cobertura-instrument todir="${cobertura.instrumented-classes.dir}">
        <fileset dir="${build.dir}">
            <include name="**/*.class" />
            <exclude name="**/*Test.class" />
        </fileset>
    </cobertura-instrument>
    <copy todir="${cobertura.instrumented-classes.dir}">
        <fileset dir="${src.dir}" casesensitive="yes">
            <patternset id="resources.ps" />
        </fileset>
    </copy>
</target>

Добавьте приведенный ниже код, и вы сможете выполнять тесты с помощью JUnit через муравей:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
<!-- Set up the instrumented classes path -->
<path id="cover-test.classpath">
    <fileset dir="${lib.dir}" includes="**/*.jar" />
    <pathelement location="${cobertura.instrumented-classes.dir}" />
    <pathelement location="${build.dir}" />
</path>
  
<!-- Run the JUnit test -->
<target name="04-RunTest" depends="03-Instrument" >
    <junit printsummary="yes" haltonerror="no" haltonfailure="no"  fork="yes">
        <batchtest>
            <fileset dir="${build.dir}" includes="**/*Test.class" />
        </batchtest>
        <classpath refid="cover-test.classpath" />
    </junit>
    <delete file="transaction.log" />
</target>

В качестве нашего последнего действия, давайте создадим отчет, используя Cobertura. Добавьте приведенный ниже код в свой «build.xml» и выполните задачу:

01
02
03
04
05
06
07
08
09
10
11
<!-- Creates the Cobertura report -->
<target name="00-CreateReport" depends="04-RunTest">
    <cobertura-report srcdir="${cobertura.data.file}" destdir="${report.dir}">
        <fileset dir="${src.dir}">
            <include name="**/*.java" />
        </fileset>
    </cobertura-report>
  
    <delete dir="${report.dir}/instrumented-classes" />
    <delete file="cobertura.ser"  />
</target>

Обновите свой проект Eclipse (нажмите F5 в проекте), и вы увидите, что отчеты были созданы с успехом. Откройте файл «index.html», который находится внутри папки «cobertura».

Каркас Cobertura помогает нам рассчитать, сколько раз мы должны тестировать метод. Выполняя домашнюю работу, напишите метод «Собака равно», создайте отчет, чтобы вы могли видеть, что ваши равные не покрываются. Создайте свои тесты и снова запустите отчет.

Вы можете скачать исходный код нашего проекта здесь .

Если у вас есть какие-либо сомнения или вопросы, просто напишите это ниже.

До скорой встречи. \ o_

Ссылка: покрытие ваших тестов с Cobertura, JUnit, HSQLDB, JPA от нашего партнера JCG