logo of the SSW institute ;)
Computer Science
System Software

Home

General
Staff
Contact
Partners
Alumni

Research
Areas
Projects
Papers
Books
Reports
Awards

Teaching
Lectures
Exams
B.Projects
M.Theses
PhD Theses
Go Abroad

Misc
Talks
Library
Gallery
Links
Search

Webmaster


Richtlinien für das Testen mit JUnit

Übersetzerbau, WS 2004 / 2005

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:
    package ssw.mj.test;
    
    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 (Text-Modus).
    > java -cp .;JUnit-Home-Verzeichnis/junit.jar ssw.mj.test.AllTests
    		
    oder Ausführen aller Tests (mit GUI).
    > java -cp .;JUnit-Home-Verzeichnis/junit.jar junit.swingui.TestRunner 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 einen 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;
        }
    
    ... }