• Keine Ergebnisse gefunden

Beuth Hochschule JUnit 3 und JUnit 4 WS15/16, S. 1

N/A
N/A
Protected

Academic year: 2021

Aktie "Beuth Hochschule JUnit 3 und JUnit 4 WS15/16, S. 1"

Copied!
4
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

Beuth Hochschule JUnit 3 und JUnit 4 WS15/16, S. 1

JUnit 3 und JUnit 4

XJunit ist eine Sammelbezeichnung für verschiedene Frameworks, mit denen man Testprogramme schreiben kann. JUnit ist eines dieser Frameworks. Mit JUnit kann man Java-Programme zum Testen von Java-Klassen schreiben. Für das Testen von .Net-Programmen, PHP-Programmen, C++-

Programmen, ... gibt es entsprechende XUnit Frameworks namens NUnit, PHPUnit, CppUnit, ... . Um eine Java-Klasse K zu testen, schreibt man eine JUnit Test-Klasse TK und lässt TK von einem sogenannten Runner-Programm ausführen. Es gibt verschiedene solche Runner-Programme. Textuelle Runner geben ihre Ergebnisse als Text-Zeilen aus. Grabo-Runner haben eine grafische

Benutzeroberfläche. Verbreitete Java Entwicklungs-Umgebungen wie Eclipse und NetBeans haben eigene, "fest eingebaute" JUnit-Runner (natürlich mit Grabo).

Von JUnit gibt es zur Zeit (Ende 2016) zwei wesentlich verschiedene Versionen: JUnit 3 und JUnit 4.

Beide Versionen haben Vor- und Nachteile. Der wichtigste Unterschied ist der folgende:

Für JUnit 3 gibt es (textuelle und Grabo-) Runner, die man auch unabhängig von einer "großen und komplizierten" Entwicklungsumgebung benutzen kann. Für JUnit 4 gibt es in den verbreiteten Entwicklungsumgebungen Grabo-Runner, aber unabhängig von Entwicklungsumgebungen muss man sich mit textuellen Runnern begnügen.

Es folgen hier

eine JUnit 3 Test-Klasse namens StringBuilderTestJU3 und eine JUnit 4 Test-Klasse namens StringBuilderTestJU4.

Beide Testklassen leisten das Gleiche: Sie führen ein paar kleine Tests mit der Klasse

StringBuilder durch. Unter Eclipse kann man jede der beiden Test-Klassen auf zwei verschiedene Weisen ausführen lassen:

mit Run As, JUnit Test, oder mit Run As, Java Application.

Damit man beim Ausführen der Test-Klassen auch ein paar Fehlermeldungen sieht (obwohl es sehr schwer, vielleicht sogar unmöglich ist, noch Fehler in der Klasse StringBuilder zu finden), wurden in die Testklassen absichtlich auch ein paar falsche Test-Befehle eingebaut, die eine Fehlermeldung bewirken, obwohl die Klasse StringBuilder (zumindest an der getesteten Stelle) keinen Fehler enthält.

(2)

S. 2, WS15/16 Die JUnit 3 Testklasse StringBuilderTestJU3 Beuth-Hochschule

Die JUnit 3 Testklasse StringBuilderTestJU3

1 /* --- 2 Datei StringBuilderTestJU3.java

3

4 Ein JUnit 3 Programm zum Testen der Klasse StringBuilder.

5 Kann (unter Eclipse) wahlweise mit 6 "Run As, Java Application" oder mit

7 "Run As, JUnit Test" ausgefuehrt werden.

8

9 In dieses Testprogramm wurden absichtlich fehlerhafte Testbefehle 10 eingebaut (gekennzeichnet mit "Geht schief!"), so dass Fehler gemeldet 11 werden, obwohl die Klasse StringBuilder diese Fehler nicht enthaelt.

12 --- */

13 import org.junit.runner.JUnitCore; // Wird in main benutzt 14

15 import junit.framework.TestCase;

16 import junit.framework.Test;

17 import junit.framework.TestSuite;

18 //--- 19 public class StringBuilderTestJU3 extends TestCase {

20

21 // Objektattribute fuer Test-Objekte, die in allen Testfaellen 22 // benutzt werden koennen (aber noch ohne Objekte):

23 StringBuilder sb00;

24 StringBuilder sb01;

25 StringBuilder sb02;

26

27 // Wird vor jedem Testfall ausgefuehrt:

28 protected void setUp() throws Exception { 29 super.setUp();

30

31 // Die Objektattribute sb00 bis sb02 auf "neue Testobjekte"

32 // zeigen lassen:

33 sb00 = new StringBuilder();

34 sb01 = new StringBuilder("ABC");

35 sb02 = new StringBuilder("Hallo Sonja! Wie geht's?");

36

37 printf("Before: [%s, %s, %s]%n", sb00, sb01, sb02);

38 } 39

40 // Wird nach jedem Testfall ausgefuehrt:

41 protected void tearDown() throws Exception { 42 super.tearDown();

43

44 printf("After: [%s, %s, %s]%n", sb00, sb01, sb02);

45 } 46

47 // Ein Testfall namens test_append_01:

48 public void test_append_01() { 49 sb00.append("DE");

50 sb01.append("DE");

51 sb02.append("DE");

52 assertEquals(true, "DE".equals(sb00.toString())); // Geht gut!

53 assertEquals(true, "ABCDE".equals(sb01.toString())); // Geht gut!

54 assertEquals(true, "ABCDE".equals(sb02.toString())); // Geht schief!

55 } 56

57 // Ein Testfall namens test_length_01:

58 public void test_length_01() {

59 assertEquals(0, sb00.length()); // Geht gut!

60 assertEquals(3, sb01.length()); // Geht gut!

61 assertEquals(3, sb02.length()); // Geht schief!

(3)

Beuth Hochschule Die JUnit 3 Testklasse StringBuilderTestJU3 WS15/16, S. 3

62 } 63

64 // Ein Testfall namens test_indexOf_01:

65 public void test_indexOf_01() {

66 StringBuilder sb03 = new StringBuilder("ABCDEFG");

67 assertEquals(0, sb03.indexOf("AB" )); // Geht gut!

68 assertEquals(1, sb03.indexOf("BCDE")); // Geht gut!

69 assertEquals(2, sb03.indexOf("CDE")); // Geht gut!

70 } 71

72 static public Test suite() { 73 // Ein TestSuite-Objekt ist im Wesentlichen eine Zusammenfassung 74 // von Namen von Testfaellen. Ein Testfall ist eine parameterlose 75 // Objektprozeudr (non-static void-method with no parameters).

76

77 // Alle mit "test" beginnenden Namen von Testfaellen kann man 78 // (pauschal) wie folgt in ein TestSuite-Objekt einfuegen:

79 TestSuite ts1 = new TestSuite(StringBuilderTestJU3.class);

80

81 return ts1;

82 } // suite

83 // --- 84 // Eine Methode mit einem kurzen Namen:

85 static void printf(String f, Object... or) {System.out.printf(f, or);}

86 // --- 87 static public void main(String[] sonja) {

88 // Ein sehr schlichter JUnit 3 Test-Runner.

89 // Gibt seine Meldungen zur Standardausgabe (Eclipse: Console) aus.

90 // junit.textui.TestRunner.run(suite());

91

92 // Ein sehr schlichter JUnit 4 Test-Runner, der 93 // auch JUnit 3 Klassen ausfuehren kann.

94 // Gibt seine Meldungen zur Standardausgabe (Eclipse: Console) aus.

95 JUnitCore.main("StringBuilderTestJU3");

96 }

97 // --- 98 }

Die JUnit 4 Testklasse StringbuilderTestJU4

99 /* --- 100 Datei StringBuilderTestJU4.java

101

102 Ein JUnit 4 Programm zum Testen der Klasse StringBuilder.

103 Kann (unter Eclipse) wahlweise mit 104 "Run As, Java Application" oder mit

105 "Run As, JUnit Test" ausgefuehrt werden.

106

107 In dieses Testprogramm wurden absichtlich fehlerhafte Testbefehle 108 eingebaut (gekennzeichnet mit "Geht schief!"), so dass Fehler gemeldet 109 werden, obwohl die Klasse StringBuilder diese Fehler nicht enthaelt.

110 --- */

111 import static org.junit.Assert.assertEquals;

112

113 import org.junit.Before;

114 import org.junit.After;

115 import org.junit.Test;

116 import org.junit.runner.JUnitCore;

117 // --- 118 public class StringBuilderTestJU4 {

119

120 // Objektattribute fuer Test-Objekte, die in allen Testfaellen

(4)

S. 4, WS15/16 Die JUnit 4 Testklasse StringbuilderTestJU4 Beuth-Hochschule

121 // benutzt werden koennen (aber noch ohne Objekte):

122 StringBuilder sb00;

123 StringBuilder sb01;

124 StringBuilder sb02;

125

126 @Before

127 // Wir vor jedem Testfall ausgefuehrt:

128 public void vor_jedem() {

129 // Die Objektattribute sb00 bis sb02 auf "neue Testobjekte"

130 // zeigen lassen:

131 sb00 = new StringBuilder();

132 sb01 = new StringBuilder("ABC");

133 sb02 = new StringBuilder("Hallo Sonja! Wie geht's?");

134

135 printf("Before: [%s, %s, %s]%n", sb00, sb01, sb02);

136 } 137

138 @After

139 // Wird nach jedem Testfall ausgefuehrt:

140 public void nach_jedem() {

141 printf("After: [%s, %s, %s]%n", sb00, sb01, sb02);

142 143 } 144

145 // Ein Testfall namens append_01:

146 @Test

147 public void append_01() { 148 sb00.append("DE");

149 sb01.append("DE");

150 sb02.append("DE");

151 assertEquals(true, "DE".equals(sb00.toString())); // Geht gut!

152 assertEquals(true, "ABCDE".equals(sb01.toString())); // Geht gut!

153 assertEquals(true, "ABCDE".equals(sb02.toString())); // Geht schief!

154 } 155

156 // Ein Testfall namens length_01:

157 @Test

158 public void length_01() {

159 assertEquals(0, sb00.length()); // Geht gut!

160 assertEquals(3, sb01.length()); // Geht gut!

161 assertEquals(3, sb02.length()); // Geht schief!

162 } 163

164 // Ein Testfall namens indexOf_01:

165 @Test

166 public void indexOf_01() {

167 StringBuilder sb03 = new StringBuilder("ABCDEFG");

168 assertEquals(0, sb03.indexOf("AB" )); // Geht gut!

169 assertEquals(1, sb03.indexOf("BCDE")); // Geht gut!

170 assertEquals(2, sb03.indexOf("CDE")); // Geht gut!

171 }

172 // --- 173 // Eine Methode mit einem kurzen Namen:

174 static void printf(String f, Object... or) {System.out.printf(f, or);}

175 // --- 176 static public void main(String[] sonja) {

177 // Ein sehr schlichter JUnit 4 Test-Runner.

178 // Gibt seine Meldungen zur Standardausgabe (Eclipse: Console) aus.

179 JUnitCore.main("StringBuilderTestJU4");

180 }

181 // --- 182 }

(5)

Beuth Hochschule Die JUnit 4 Testklasse StringbuilderTestJU4 WS15/16, S. 5

Die Ausgabe der beiden Programme:

Before: [, ABC, Hallo Sonja! Wie geht's?]

After: [, ABC, Hallo Sonja! Wie geht's?]

Before: [, ABC, Hallo Sonja! Wie geht's?]

After: [, ABC, Hallo Sonja! Wie geht's?]

Before: [, ABC, Hallo Sonja! Wie geht's?]

After: [DE, ABCDE, Hallo Sonja! Wie geht's?DE]

Anmerkung: Die einzelnen Testfälle werden nicht unbedingt in der Reihenfolge ausgeführt, in der sie in der Testklasse vereinbart wurden.

Referenzen

ÄHNLICHE DOKUMENTE

Die Testmethoden überprüfen jeweils nur einen atomaren Teil, so dass eine Methode auch durch verschiedene Tests getestet werden sollte.. Die Vorbedingungen sollten in der

Oft wird als selbstverständlich vorausgesetzt, dass Zahlen als 10-er-Zahlen (Dezimalzahlen) dargestellt werden und man unterscheidet dann auch nicht zwischen Eigenschaften

I know that there are still many aspects in JavaFX that could be and must be improved but for me, with the desk- top as the target platform, JavaFX is a big step forward compared

Beuth Hochschule Zwei Grabo-Programme

An der Nachklausur dürfen Sie nur teilnehmen, wenn Sie die Hauptklausur nicht bestanden oder nicht mitgeschrieben haben.. In einer Klausur können Sie 100

Wenn Sie (durch einen Links-Doppelklick auf die Verknüpfung startCmd) eine Eingabeaufforderung öffnen, ist immer ein ganz bestimmter Ordner Ihr aktuelles Arbeitsverzeichnis. Wenn

Eine JUK muss eine parameterlose Klassenprozedur namens suite enthalten, 13 die ein Test-Objekt liefert (junit.framework.Test ist eine Schnittstelle, 14 die

static void assertEquals ( long soll, long ist) static void assertEquals ( short soll, short ist) static void assertEquals ( String soll, String