如何从java文件外部模拟控制台输入

时间:2016-12-08 23:33:12

标签: java java-io

我需要从另一个java类中编译并运行一个java类,然后将一些东西输入到前者的控制台中 需要将测试类的(控制台)输出重定向到测试类。 我已经尝试了类似的东西,测试文件被给了一个文本文件而不是控制台输入,并且没有问题,这就是为什么我认为控制台输入必须是问题。

这是我到目前为止所提出的:

@testing
import java.io.*;
public class Test {
    public static void main(String [] args) throws Exception{

      Process javac = Runtime.getRuntime().exec("javac ToBeTested.java");
      javac.waitFor();

      Process process = Runtime.getRuntime().exec("java ToBeTested");
      BufferedReader readFromProcess = new BufferedReader(new InputStreamReader(process.getInputStream ()));
      BufferedReader errorFromProcess = new BufferedReader(new InputStreamReader(process.getErrorStream ()));
      BufferedWriter writeToProcess = new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
      writeToProcess.write("Foo");
      System.out.println("Foo written");
      writeToProcess.write("FooBar");
      System.out.println("FooBar written");
      System.out.println("Tested Process:" +readFromProcess.readLine());
      writeToProcess.write("Bar");
      System.out.println("Bar written");
      String line;
      for (String line=readFromProcess.readLine(); line != null; line =readFromProcess.readLine()){
              System.out.println("Tested Process:" +line);
}
      process.waitFor();

    }
}

@tested
import java.io.*;
public class ToBeTested {
    public static void main(String[] args) throws IOException{
      BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
      System.out.println("foo");
      System.out.println(input.readLine());
      System.out.println("fooBar");
        }

    }

现在输出如下:

Foo written
FooBar written
Tested Process:null
Bar written

另外,如果我注释掉

writeToProcess.write("Bar");  

程序将陷入

process.waitFor();  

,可能是因为ToBeTested仍然需要某种输入。这是否意味着写入方法按预期工作?如果是这样的话:为什么输出不起作用?

请注意,ToBeTested类无法更改(甚至无法访问)。在ToBeTested中预期输入时获得某种通知也会很好,因为所需输入的数量和顺序可能会有所不同。

0 个答案:

没有答案