我有两种方法,我正在努力编写测试。
一个原因是我无法将测试用例中的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);
由于以下原因导致测试失败:
错误:找不到行
答案 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);
// ...
这使代码更容易测试。
由于您的Scanner
为static
,因此您可能需要在初始化课程之前执行setIn
:
boolean expResult = false;
InputStream in = new ByteArrayInputStream("N\n".getBytes());
System.setIn(in);
DealOrNoDeal instance = new DealOrNoDeal("", 0);