2015-03-09 3 views
1

Так вот код:Как я могу протестировать метод, который использует сканер и InputStream?

public int foo(InputStream in) { 
    int counter = 0; 
    Scanner scanner = new Scanner(in); 
    while(scanner.hasNextLine()) { 
     counter++; 
     scanner.nextLine(); 
    } 
    return counter; 
} 

Обычно я буду пропусканием FileInputStream к этому методу, однако я хочу, чтобы иметь возможность протестировать его без доступа физического файла.

Должен ли я высмеивать объект File? Как я могу осуществить

@Test 
public void shouldReturnThree(){ 

} 
+2

Как насчет ['ByteArrayInputStream'] (http://docs.oracle.com/javase/7 /docs/api/java/io/ByteArrayInputStream.html)? – RealSkeptic

ответ

4

Вы можете пройти тест строки в метод как InputStream, как это (:

InputStream stream = new ByteArrayInputStream(exampleString.getBytes()); 

(бессовестно украдены из this answer)

Например, этот код будет print 3:

String str = "\n\n\n"; 
InputStream stream = new ByteArrayInputStream(str.getBytes()); 
System.out.println(foo(stream)); 
+0

Как мне вернуть этот поток 3? –

+0

@KorayTugay добавил пример – Malt

+0

@ JBNizet, вы правы. Я удалил пользовательскую кодировку. – Malt

Смежные вопросы