我班上写的方法
public static Advertisement[] createAd() throws IOException
{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
Advertisement[] ad = new Advertisement[5];
int count =0;
char ch;
do
{
System.out.println("Enter advertisement id:");
int id=Integer.parseInt(br.readLine());
System.out.println("Enter advertisement type:");
String type=br.readLine();
ad[count]= new Advertisement(id, type);
count++;
System.out.println("Do you want publish another advertisement(Y/N):");
ch = br.readLine().charAt(0);
if((ch!='y')&&(ch!='Y'))
{
break;
}
}while(count<=5);
if(count==5)
{
System.out.println("Maximum ads reached");
return ad;
}
return ad;
}
Juint @Test method
@Test
public void testCreateAd() throws IOException
{
Advertisement[] a = Advertisement.createAd();
assertTrue("Maximum five ads only should be created",(a.length<=5));
}
我想检查一下,createAd方法应该返回类型为Advertisement的5个对象的最大值。但是当@Test方法运行它要求输入时,我们可以通过某些地方将输入传递给那些readLine方法
答案 0 :(得分:0)
我认为你需要模拟缓冲的阅读器。 你可以将它作为方法参数传递(或创建另一个接受它作为参数的方法,然后在测试代码中模拟它。 看看this。
答案 1 :(得分:0)
BufferedReader
应该是private
班级成员。如果你这样做,你可以在你的测试类中@Mock
这个成员,然后你可以控制它的每次调用和返回值。
@Mock
private BufferedReader bufferedReaderMock;
Mockito.doReturn("some input").when(bufferedReaderMock).readLine();
现在,您可以控制和模拟用户可能输入的值。 在yoz断言之前不要忘记这一点:
Mockito.verify(bufferedReaderMock).readLine(); // Verify it was called
Mockito.verifyNoMoreInteractions(<all mocks)); // verify no other dependency class/member was called.