main
方法不适合单元测试。它只是一个应用程序的入口点。可能你需要重构你的类来进行某种依赖注入。例如:
public class Something {
private final LinesProvider linesProvider;
public Something(LinesProvider linesProvider) {
this.linesProvider = linesProvider;
}
public void sayHello() {
String str = linesProvider.readLine();
System.out.println("halo "+str);
}
public static void main(String args[]) {
new Something(new LinesProvider() {
private final Console console = System.console();
@Override
public String readLine() {
return console.readLine();
}
}).sayHello();
}
}
interface LinesProvider {
String readLine();
}
然后,您可以测试系统输出如下所示,但这不是一个好习惯。相反,尝试从程序中分离逻辑I/O逻辑:
public class TestSomething {
private ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
private PrintStream printStream = new PrintStream(outputStream, true);
@Before
public void setUp() {
System.setOut(printStream);
}
@Test
public void test() {
new Something(new LinesProvider() {
@Override
public String readLine() {
return "Vasya";
}
}).sayHello();
assertEquals("halo Vasya" + System.getProperty("line.separator"), new String(outputStream.toByteArray()));
}
}