Kann mir jemand bei dem JUnit-Test helfen?
Ich muss eine JUnit-Test für die Klasse NumberInputStream. Kann mir einer helfen. Ich habe schon. Im Datei"zahlen_1.txt"steht diese Zahlen?
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
public class NumberInputStream extends InputStream {
Reader in;
public NumberInputStream(String fileName) throws IOException {
in = new InputStreamReader(new FileInputStream(fileName));
}
@Override
public int read() throws IOException, NumberToLargeException {
int c;
String t = "";
while ((c = in.read()) != -1) {
if ((char) c == ' ' || (char) c == '\n' || Character.isWhitespace(c)) {
if (!t.trim().equals("")) {
break;
}
} else {
t += (char) c;
}
}
if (t.trim().equals("")) {
return -1;
}
int value = Integer.parseInt(t.trim());
if (value > 255) {
throw new NumberToLargeException();
}
return value;
}
}
Ich habe diesen Testklasse geschrieben, aber der will unbedingt Junit-Test sehen.
mport com.mycompany.mavenproject1.NumberInputStream;
import java.io.IOException;
public class NumberInputStreamTest {
public static void main(String[] args) throws IOException {
NumberInputStream inputStream = new NumberInputStream("zahlen_2.txt");
try {
int value;
while (true) {
value = inputStream.read();
if (value == -1) {
break;
}
System.out.println(value);
}
} catch (IOException e) {
System.err.println("Error: " + e.getMessage());
}
}
}
Und wo ist dein Test? Hier sieht man nur die Klasse selbst.
habe meine Testklasse hochgeladen, ich weis nicht, wie ich es zu Junit-Test umwandeln?
1 Antwort
Schau mal hier:
https://www.vogella.com/tutorials/JUnit/article.html
Du kannst Annotations an deine Methoden setzen. Dadurch werden die beim Ausführen des Unit-Tests dann entsprechend ausgeführt.
Du kannst Assertions verwenden, um Ergebnisse zu prüfen.
Du musst gegebenenfalls schauen, dass du den Test auch als test ausführst und nicht als normales Programm.
Was du bei dir machen kannst:
Du rufst read auf und vergleichst dann, ob die gelesene Zahl er Zahl entspricht, die in der Text-Datei steht (die du entweder manuell überträgst oder mit einer Referenz-Implementierung parst).
Wie gesagt, womöglich führst du den Test nicht als Unit-Test aus. Wie startest du den Test denn?
public class NumberInputStreamTest {
@Test
void testReadValidNumbers() throws IOException, NumberToLargeException {
NumberInputStream inputStream = new NumberInputStream("zahlen_1.txt");
int value;
value = inputStream.read();
assertEquals(12, value);
value = inputStream.read();
assertEquals(0, value);
value = inputStream.read();
assertEquals(222, value);
value = inputStream.read();
assertEquals(89, value);
value = inputStream.read();
assertEquals(123, value);
value = inputStream.read();
assertEquals(45, value);
value = inputStream.read();
assertEquals(78, value);
value = inputStream.read();
assertEquals(7, value);
value = inputStream.read();
assertEquals(77, value);
value = inputStream.read();
assertEquals(1, value);
value = inputStream.read();
assertEquals(3, value);
value = inputStream.read();
assertEquals(4, value);
value = inputStream.read();
assertEquals(45, value);
value = inputStream.read();
assertEquals(45, value);
value = inputStream.read();
assertEquals(37, value);
value = inputStream.read();
assertEquals(73, value);
}
@Test
void testReadNumberToLargeException() throws IOException {
NumberInputStream inputStream = new NumberInputStream("zahlen_2.txt");
assertThrows(NumberToLargeException.class, inputStream::read);
}
}
Der Test muss ich ohne Main_Methode schreiben, aber wenn ich die Main_Methode lösche, funktioniert bei mir nicht
Dann führst du den Test nicht als Test aus.
Wenn du die Annotation passend setzt, dann sollte das als Unit-Test ausführbar sein.
Ich habe mehrere Junit-Test geschrieben aber das funktioniert nicht