JUnit,Scanner和使用ByteArrayInputStreams

时间:2016-06-10 05:37:37

标签: java junit

我有两种方法,我正在努力编写测试。 一个原因是我无法将测试用例中的int值传递给方法,使其满足Scanner.hasNextInt,另一个是同样的考验但是nextLine。我已经能够使用ByteArrayInputStreams,在其他测试中传递字符串,但是他们测试的方法只有next()

如何从我的测试用例中传递integer Scanner将读为int以及\n字符的值。

一些代码让您了解我一直试图没有运气。 这是针对\n问题的测试用例。

System.out.println("isItADeal");
DealOrNoDeal instance = new DealOrNoDeal("", 0);
boolean expResult = false;
InputStream in = new ByteArrayInputStream("N\n".getBytes());
System.setIn(in);
boolean result = instance.isItADeal();
assertEquals(expResult, result);

由于以下原因导致测试失败:

  

错误:找不到行

1 个答案:

答案 0 :(得分:1)

看到代码,我建议将输入流“传递”给你的构造函数,如:

public final Scanner scan;

public DealOrNoDeal(String _contestantName, int _selectedCase) {
    this(System.in, _contestantName, _selectedCase);
}

// for testing purposes.
public DealOrNoDeal(InputStream in, String _contestantName, int _selectedCase) {
    this.scan = new Scanner(in);
    // ...

这使代码更容易测试。

由于您的Scannerstatic,因此您可能需要在初始化课程之前执行setIn

boolean expResult = false;
InputStream in = new ByteArrayInputStream("N\n".getBytes());
System.setIn(in);
DealOrNoDeal instance = new DealOrNoDeal("", 0);