2013-09-24 33 views
5

tôi bên dưới mã trong một phương pháp mà tôi muốn kiểm traMock File, FileReader và lớp BufferedReader sử dụng Mockito

File f = map.get("key1") 
BuffereReader r = new BufferedReader(new FileReader(f)); 
String line=null; 
do { 
    line=r.readLine(); 
} while(r!=null); 

Tôi muốn thử hoạt động này để tôi có thể vượt qua các nội dung của các tập tin từ JUnit trường hợp thử nghiệm. Tôi đã làm dưới đây:

Map fles = Mockito.mock(ConcurrentHashMap.class); 
File file = Mockito.mock(File.class); 
Mockito.when(files.get("key1")).thenReturn(file); 

FileReader fileReader = Mockito.mock(FileReader.class); 
BufferedReader bufferedReader = Mockito.mock(BufferedReader.class); 

try { 
    PowerMockito.whenNew(FileReader.class).withArguments(file).thenReturn(fileReader); 
    PowerMockito.whenNew(BufferedReader.class).withArguments(fileReader).thenReturn(bufferedReader); 
    PowerMockito.when(bufferedReader.readLine()).thenReturn("line1") 
     .thenReturn("line2").thenReturn("line3"); 

    } catch (Exception e) { 
     Assert.fail(); 
    } 

Vì vậy, về cơ bản tôi cần phải vượt qua "line1", "dòng2" và "Line3" như dòng từ tập tin được đọc bởi BufferedReader chế giễu.

Tuy nhiên, khi thực hiện điều đó, nó không thành công như NullPointerException khi cố gắng khởi tạo phần FileReader (f) mới.

Vì vậy, đó là vì tôi không thể giả mạo BufferedReader hoặc phương pháp tiếp cận là sai?

Cảm ơn

Trả lời

0

Bạn có thể thử chú thích PowerMock. Kiểm tra điều này: https://code.google.com/p/powermock/wiki/MockConstructor

+0

Tôi đang sử dụng PowerMockito và PowerMock là không có sẵn cho tôi. Vì vậy, bất kỳ câu trả lời trong ngữ cảnh của PowerMockito sẽ rất hữu ích. – user2654241

+0

Kiểm tra liên kết này: http://stackoverflow.com/questions/7523389/how-do-i-use-powermockito-to-mock-the-construction-of-new-objects-when-testing-a – Sai

9

Bạn có thể trích xuất một phương pháp để thực hiện việc đọc thực tế và sau đó kiểm tra thay vào đó. Điều đó có nghĩa là bạn chỉ phải chế nhạo một độc giả. Ví dụ, mã của bạn sẽ là một cái gì đó như thế này:

public void aMethod(){ 
    File f = map.get("key1") 
    BuffereReader r = new BufferedReader(new FileReader(f)); 
    readStuff(r); 
} 

public void readStuff(BufferedReader r){ 
    String line=null; 
    do { 
     line=r.readLine(); 
    } while(r!=null); 
} 

sau đó mã kiểm tra của bạn sẽ được nhiều hơn như sau:

BufferedReader bufferedReader = Mockito.mock(BufferedReader.class); 
Mockito.when(bufferedReader.readLine()).thenReturn("line1", "line2", "line3"); 
objUnderTest.readStuff(bufferedReader); 
//verify result 
+6

+1 to viết lại bài kiểm tra, nhưng tại thời điểm đó bạn thậm chí không cần phải giả lập BufferedReader; bạn có thể chuyển thẳng sang 'BufferedReader mới (StringReader mới (" line1 \ nline2 \ nline3 "))'. –

Các vấn đề liên quan