有没有办法从Java中的方法提供自动扫描程序输入?

时间:2019-05-14 10:21:11

标签: java testing java.util.scanner

我正在创建一个小的线性代数库,其中包含矩阵加法,标量乘法,获取转置等,并使用构造函数将所需矩阵的维数作为参数。

这个想法是能够在创建对象时返回带有随机元素或用户指定元素的给定大小的矩阵,我正在使用Scanner让用户在两者之间进行选择,并输入指定的元素。但是我希望能够通过以下方式自动化对扫描仪的响应“是”以获得包含随机元素的矩阵或仅包含全1的矩阵进行测试。

我尝试使用System.out.println(“ yes”)希望它能回答扫描程序,但显然这是行不通的。

 public static void main(String[] args){
        Matrix matrix1 = new Matrix(4,4);
        System.out.println("yes");

这是构造函数

Matrix(int rowSize, int colSize){
        Scanner scan = new Scanner(System.in);
        System.out.println("Do you want randomized elements?");
        String myChoice = scan.nextLine();
        if(Pattern.matches("(?i)[ye]+s*", myChoice)){
            NewMat(rowSize, colSize, 1);
        }
        else{
            NewMat(rowSize, colSize, 0);
        }
        System.out.println(GetMat());
    }

我希望能够轻松创建一个矩阵,例如所有元素均为1或立即获得随机矩阵,而不必每次都回答Scanner。有没有一种方法可以直接使用main方法对扫描仪做出响应?也就是说,是否可以执行类似创建矩阵并使用System.out.println(“ yes”)的操作来获取随机元素的方法(我知道这是行不通的,但这是我使用哪种解决方案的一个示例寻找),从而避免在终端中写?

2 个答案:

答案 0 :(得分:3)

使用第三个参数 input ,该参数具有三个可能的值。说 no_data

Matrix(int rowSize, int colSize, String input) {
  Scanner scan;
  String myChoice;
  if (!input.equals("no_data") {
      scan = new Scanner(System.in);
      System.out.println("Do you want randomized elements?");
      myChoice = scan.nextLine();
    } else {
      myChoice = input;
    }
    if (Pattern.matches("(?i)[ye]+s*", myChoice)) {
      NewMat(rowSize, colSize, 1);
    } else {
      NewMat(rowSize, colSize, 0);
    }
    System.out.println(GetMat());
  }
}

然后您可以调用构造函数

Matrix matrix1 = new Matrix(4,4,"yes");

答案 1 :(得分:1)

也许这可以为您工作:

System.setIn(new FileInputStream(new File("mytestscenario.txt""));

来源:JUnit: How to simulate System.in testing?