2013-10-30 218 views
0

Java项目的Java项目的测试方法需要输入

public ArrayShoppingList() 
    { 

    // initialise instance variables 
    super(); 
    } 

    //public void addItem(int itemPosition,String item){ 
    // super.add(itemPosition,item); 
    // } 
    public void addItem(){ 
     System.out.println("Please enter the item you wish to enter into the shopping 
     List"); 
     Scanner reader1 = new Scanner(System.in); 
     String item = reader1.next(); 
     super.add(super.size(),item); 
     } 

    public void getPosition(){ 
    System.out.println("Please enter the item name that you wish to find 
    theposition   of"); 
    Scanner reader1 = new Scanner(System.in); 
    String item = reader1.next(); 
    super.indexOf(item); 
    } 



public void removeItem(){ 
    System.out.println("Please enter the item number that you wish to remove"); 
    Scanner reader1 = new Scanner(System.in); 
    String item = reader1.next(); 
    int itemIndex = super.indexOf(item); 
    super.remove(itemIndex); 
     } 

我想知道如何测试在测试类,要求用户输入这样的方法。 的方法调用从ArrayLinearList其他方法和传递数据的用户在进入,我想创建一个模拟了用户可能输入的代码。

+1

http://stackoverflow.com/questions/6415728/junit-testing-with-simulated-user-input – xyz

回答

0

使用System.setIn为Unitesting Scanner。例如:

String input = "Your input data"; 
System.setIn(new ByteArrayInputStream(input.getBytes())); 

Scanner scanner = new Scanner(System.in); 
System.out.println(scanner.nextLine()); 

输出:

Your input data 
1

您可以使用框架,如的MockitoPowermock到嘲笑扫描仪。如果这个类然后调用扫描器输入,你可以让你的模拟器返回一些字符串,这些字符串将作为你的类的用户输入处理。你的班级不会看到“真实”扫描仪和你的模拟实现之间的区别。

参见:

1

您可以使用System.setIn(InputSteam)

在这里,您可以指定自己的InputStream和添加要它的输入。