Richtlinien für das Testen mit JUnit

Übersetzerbau, WS 2002 / 2003

Tests ausführen

  1. Methode AllTests.suite() so anpassen, dass tatsächlich alle (gewünschten) Testfälle ausgeführt werden.
    z.B. für Übung 2:
    public class AllTests extends TestCase { public static Test suite () { TestSuite suite = new TestSuite(); suite.addTestSuite(TokenTest.class); suite.addTestSuite(ScannerTest.class); // add more suites here return suite; }
    public static void main (String[] args) { junit.textui.TestRunner.run(suite()); } }
  2. Compilieren des Compilers- und der Testfälle.
    > javac -classpath .;JUnit-Home-Verzeichnis/junit.jar ssw/mj/*.java ssw/mj/test/*.java
  3. Ausführen aller Tests.
    > java -cp .;JUnit-Home-Verzeichnis/junit.jar ssw.mj.test.AllTests

Tests erstellen/hinzufügen

Zusätzliche Tests können auf drei Arten hinzugefügt werden:
  1. In bestehender Testfallmethode
  2. In bestehender Testfallklasse
  3. In neuer Testfallklasse

In bestehender Testfallmethode

Fügen Sie einfach in eine bestehende Testfallmethode (= test...) Ihren zusätzlichen Testcode ein.
z.B. in ScannerTest.java

public void testInvalidSymbols () { ... initScanner("ä");
checkNext(none, 1, 1); output.addExpectedLine("-- line 1, col 1: invalid character 'ä'"); checkNext(eof, 1, 1);
output.verify();
initScanner(" ö ");
checkNext(none, 1, 2); output.addExpectedLine("-- line 1, col 2: invalid character 'ö'"); checkNext(eof, 1, 3);
output.verify();
}

In bestehender Testfallklasse

Um eine neuen Testfall zu erstellen, fügen Sie eine neue Methode, deren Name mit test beginnt, in eine bestehende Testklasse ein.
z.B. in ScannerTest.java:

public class ScannerTest extend TestCase { public void testMyClass () { ... initScanner("class MyClass {" + LF + "\tvoid main() { }" + LF + "}");
checkNext(classKW, 1, 1, "class"); checkNext(ident, 1, 7, "MyClass"); checkNext(lbrace, 1, 15); checkNext(voidKW, 2, 2, "void"); checkNext(ident, 2, 7, "main"); checkNext(lpar, 2, 11); checkNext(rpar, 2, 12); checkNext(lbrace, 2, 14); checkNext(rbrace, 2, 16); checkNext(rbrace, 3, 1); checkNext(eof, 3, 1);
output.verify(); }

... }

In neuer Testfallklasse

  • Jede Testfallklasse muss von junit.framework.TestCase abgeleitet werden.
  • Die Namen aller Testmethoden müssen mit test beginnen (siehe oben).
  • In der Main-Methode der Testfallklasse können Sie vorsehen, mit welchem TestRunner Ihre Testfälle ausgeführt werden sollen. Dabei können Sie zwischen einfacher Textausgabe und zwei GUI-Versionen wählen.
    z.B. in Klasse MyTest:
    • Textausgabe:
      public static void main (String[] args) { junit.textui.TestRunner.run(MyTest.class); }
    • AWT-GUI:
      public static void main (String[] args) { junit.awtui.TestRunner.run(MyTest.class); }
    • Swing-GUI:
      public static void main (String[] args) { junit.swingui.TestRunner.run(TokenTest.class); }
    Sie können diese Testfälle dann mit
        > java -cp .; JUnit-Home-Verzeichnis/junit.jar MyTest
    ausführen.
  • Um die Testfälle der neuen Testfallklasse MyTest auch mit AllTests auszuführen, fügen Sie einfach folgende Zeile zur suite-Methode der Klasse ssw.mj.test.AllTests hinzu:

    public class AllTests extends TestCase { public static Test suite () { TestSuite suite = new TestSuite(); suite.addTestSuite(TokenTest.class); suite.addTestSuite(ScannerTest.class); suite.addTestSuite(MyTest.class); // add more suites here return suite; }
    ... }