Wie kann ich Konsoleneingaben durch den Scanner mit JUnit 4 testen?

yachty66

Mitglied
Ich würde gerne den folgenden Code tetsen lassen:



Java:
package MyTestProg;

import java.util.InputMismatchException;
import java.util.Scanner;

public class Console {
       
    static final Scanner in = new Scanner(System.in);
    //private static int num;

    static public int readIntegerFromStdIn(String text) {
        int num;
        while ( true ) {
            try {
                System.out.print(text + " ");
                num = in.nextInt();
                break;
            } catch(InputMismatchException e) {
                String errStr = in.next();  
            }
        }return num;
       
       
    }
           
    static public String readStringFromStdIn(String text) {
        String name;
        while ( true ) {
            try {
                System.out.print(text + " ");
                name = in.next();
                break;
            } catch(Exception e) {
                String errStr = in.next();  
            }
        }return name;
    }

}



Hier ist der Code aus meiner Testklasse dazu:





Java:
package MyTestProg;

import org.junit.Test;
import static org.junit.Assert.*;

import java.util.InputMismatchException;

public class ConsolenTest {
    Console console = new Console();

    @Test
    public void testReadIntegerFromStdInNormal() {
        assertEquals(1, console.readIntegerFromStdIn("Please insert a number: "));
    }
    
    @Test
    public void testReadIntegerFromStdInFail() {
         assertEquals(2, console.readIntegerFromStdIn("Please insert a number: "));
    }

    @Test
    public void testReadStringFromStdInNormal() {
        assertEquals("TestString", console.readStringFromStdIn("Please enter prename: "));
    }
}



1. Die Tests laufen einfach durch, ohne dass ich eine Konsoleneingabe machen kann.
2. Später muss ich die Tests in Gradle laufen lassen, also bin ich darauf angewiesen, dass die Tests automatisch durchlaufen, ohne eine Eingabe in die Konsole.
 
Mein Tipp wäre, den Code so umzuschreiben, dass es sinnvoll testbar ist. Alles so statisch zu halten ist nicht wirklich testbar.
 

Zurück
Oben