2013-06-15 3 views
0

Так что я пытаюсь построить проект с this учебник. Я запускаю муравей и получаю ошибку. Первое, что я вижу, это ... ошибка: пакет junit.framework не существует [javac] import junit.framework.TestCase; Учебник был очень неспецифичен в отношении возможной ошибки. Это просто говорит, что я не мог установить JUnit. Я использую самую последнюю версию Java, которая, как я полагаю, поставляется с JUnit. Таким образом, проблема заключается в том, чтобы найти ее (или, по крайней мере, подтвердить ее существование) и добавить это в файл сборки. Как мне это сделать?Не удается найти JUnit на Mac

build.xml

<project name="cobertura.examples.basic" default="coverage" basedir="."> 

    <description> 
    Cobertura - http://cobertura.sourceforge.net/ 
    Copyright (C) 2003 jcoverage ltd. 
    Copyright (C) 2005 Mark Doliner &lt;[email protected]&gt; 
    Copyright (C) 2006 Dan Godfrey 
    Cobertura is licensed under the GNU General Public License 
    Cobertura comes with ABSOLUTELY NO WARRANTY 
    </description> 

    <property file="build.properties" /> 

    <path id="cobertura.classpath"> 
     <fileset dir="${cobertura.dir}"> 
      <include name="cobertura.jar" /> 
      <include name="lib/**/*.jar" /> 
     </fileset> 
    </path> 
    <taskdef classpathref="cobertura.classpath" resource="tasks.properties"/> 

    <target name="init"> 
     <mkdir dir="${classes.dir}" /> 
     <mkdir dir="${instrumented.dir}" /> 
     <mkdir dir="${reports.xml.dir}" /> 
     <mkdir dir="${reports.html.dir}" /> 
     <mkdir dir="${coverage.xml.dir}" /> 
     <mkdir dir="${coverage.summaryxml.dir}" /> 
     <mkdir dir="${coverage.html.dir}" /> 
    </target> 

    <target name="compile" depends="init"> 
     <javac srcdir="${src.dir}" destdir="${classes.dir}" debug="yes"> 
      <classpath refid="cobertura.classpath" /> 
     </javac> 
    </target> 

    <target name="instrument" depends="init,compile"> 
     <!-- 
      Remove the coverage data file and any old instrumentation. 
     --> 
     <delete file="cobertura.ser"/> 
     <delete dir="${instrumented.dir}" /> 

     <!-- 
      Instrument the application classes, writing the 
      instrumented classes into ${build.instrumented.dir}. 
     --> 
     <cobertura-instrument todir="${instrumented.dir}"> 
      <!-- 
       The following line causes instrument to ignore any 
       source line containing a reference to log4j, for the 
       purposes of coverage reporting. 
      --> 
      <ignore regex="org.apache.log4j.*" /> 

      <fileset dir="${classes.dir}"> 
       <!-- 
        Instrument all the application classes, but 
        don't instrument the test classes. 
       --> 
       <include name="**/*.class" /> 
       <exclude name="**/*Test.class" /> 
      </fileset> 
     </cobertura-instrument> 
    </target> 

    <target name="test" depends="init,compile"> 
     <junit fork="yes" dir="${basedir}" failureProperty="test.failed"> 
      <!-- 
       Note the classpath order: instrumented classes are before the 
       original (uninstrumented) classes. This is important. 
      --> 
      <classpath location="${instrumented.dir}" /> 
      <classpath location="${classes.dir}" /> 

      <!-- 
       The instrumented classes reference classes used by the 
       Cobertura runtime, so Cobertura and its dependencies 
       must be on your classpath. 
      --> 
      <classpath refid="cobertura.classpath" /> 

      <formatter type="xml" /> 
      <test name="${testcase}" todir="${reports.xml.dir}" if="testcase" /> 
      <batchtest todir="${reports.xml.dir}" unless="testcase"> 
       <fileset dir="${src.dir}"> 
        <include name="**/*Test.java" /> 
       </fileset> 
      </batchtest> 
     </junit> 

     <junitreport todir="${reports.xml.dir}"> 
      <fileset dir="${reports.xml.dir}"> 
       <include name="TEST-*.xml" /> 
      </fileset> 
      <report format="frames" todir="${reports.html.dir}" /> 
     </junitreport> 
    </target> 

    <target name="coverage-check"> 
     <cobertura-check branchrate="34" totallinerate="100" /> 
    </target> 

    <target name="coverage-report"> 
     <!-- 
      Generate an XML file containing the coverage data using 
      the "srcdir" attribute. 
     --> 
     <cobertura-report srcdir="${src.dir}" destdir="${coverage.xml.dir}" format="xml" /> 
    </target> 

    <target name="summary-coverage-report"> 
     <!-- 
      Generate an summary XML file containing the coverage data using 
      the "srcdir" attribute. 
     --> 
     <cobertura-report srcdir="${src.dir}" destdir="${coverage.summaryxml.dir}" format="summaryXml" /> 
    </target> 

    <target name="alternate-coverage-report"> 
     <!-- 
      Generate a series of HTML files containing the coverage 
      data in a user-readable form using nested source filesets. 
     --> 
     <cobertura-report destdir="${coverage.html.dir}"> 
      <fileset dir="${src.dir}"> 
       <include name="**/*.java"/> 
      </fileset> 
     </cobertura-report> 
    </target> 

    <target name="clean" description="Remove all files created by the build/test process."> 
     <delete dir="${classes.dir}" /> 
     <delete dir="${instrumented.dir}" /> 
     <delete dir="${reports.dir}" /> 
     <delete file="cobertura.log" /> 
     <delete file="cobertura.ser" /> 
    </target> 

    <target name="coverage" depends="compile,instrument,test,coverage-report,summary-coverage-report,alternate-coverage-report" description="Compile, instrument ourself, run the tests and generate JUnit and coverage reports."/> 

</project> 

ответ

2

Это правда, что вы не получите JUnit, когда вы захватить самую последнюю JDK для Mac.

При загрузке и установке последнего junit.jar от http://junit.org, и настройка муравья, чтобы найти его, поможет вам, вам, вероятно, будет лучше, изучая junit с веб-страницы JUnit, а не из краткого учебника по cobertura онлайн. В этих документах есть руководство по загрузке и установке, что довольно хорошо (при условии, что вы знаете, что такое путь к классам), а также супер-небольшое пошаговое руководство, чтобы вы начали.

Вы не будете считать, что класс junit.framework.TestCase является частью JUnit версии 3, которая является очень. Если у вас нет устаревшего кода для работы, вы можете начать с изучения JUnit 4, который существует уже много лет.

Есть и другие способы использования JUnit. В вашей среде IDE уже есть плагин JUnit. Альтернативой является использование Maven. Указав junit в файле проекта maven, maven выберет и установит junit для вас автоматически. Maven довольно сложный, но как только вы привыкнете к нему, вы, вероятно, будете использовать его для всех ваших приложений Java.

ADDENDUM

Вот полный пример с использованием Maven и JUnit, который работает на Mac. Все, что вам нужно для установки, это JDK и Maven. Как только это будет сделано создать каталог для нового проекта и создать только три файла:

  • PROJECT_ROOT/pom.xml
  • PROJECT_ROOT/SRC/главная/Java/COM/пример/Pair.java
  • PROJECT_ROOT /src/test/java/com/example/PairTest.java

Вот pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 

    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.example</groupId> 
    <artifactId>pairs</artifactId> 
    <version>1.0</version> 

    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.10</version> 
     <scope>test</scope> 
    </dependency> 
    </dependencies> 
</project> 

Вот Pair.java

package com.example; 
class Pair { 
    int x, y; 
    public Pair(int x, int y) {this.x = x; this.y = y;} 
    public int getX() {return x;} 
    public int getY() {return y;} 
    @Override public String toString() {return String.format("(%d,%d)", x, y);} 
} 

и здесь PairTest.java

package com.example; 
import static org.hamcrest.CoreMatchers.is; 
import static org.junit.Assert.assertThat; 
import org.junit.Test; 

public class PairTest { 

    @Test 
    public void gettersWork() { 
     Pair p = new Pair(4, 6); 
     assertThat(p.getX(), is(4)); 
     assertThat(p.getY(), is(6)); 
     assertThat(p.toString(), is("(4,6)")); 
    } 
} 

Теперь из корневой директории проекта, просто введите

mvn test 

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

Последние несколько строк вы должны увидеть что-то вроде:

------------------------------------------------------- 
T E S T S 
------------------------------------------------------- 
Running com.example.PairTest 
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.308 sec 

Results : 

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 

[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 

Надежда, что помогает.

+0

Я больше интересовался попытками узнать, как работают Cobertura, Jekins и JUnit, и меньше об JUnit. Но ваш ответ дал мне много подумать, поэтому, если вы не возражаете, у меня есть несколько новых quesitons для вас. 1. Если я получу JUnit4, как мне настроить муравей, чтобы найти его? 2. Я действительно не знаю, какой класс ватт-класса, поразмыслить? 3. Есть ли урок Maven, похожий на тот, который я использую, где он излагает проект, тесты junit и так далее? – EasilyBaffled

+1

Нет проблем. Я добавил полный пример maven к моему ответу. Я не использовал муравьев в течение многих лет, перейдя на maven в 2004 году. –

+0

Сначала спасибо тонну за то, что нашли время, чтобы написать пример. Во-вторых, я запускаю его, но на данный момент я получаю «Нет тестов для запуска». Я не уверен, почему я думаю, что что-то может быть не так с моими банками JUnit и где они. В-третьих, после запуска mcn, для чего предназначен целевой каталог? – EasilyBaffled

Смежные вопросы