Se moquer de Fichier, FileReader et BufferedReader classe à l'aide de Mockito
J'ai reçu de code ci-dessous dans une méthode qui je veux tester
File f = map.get("key1")
BuffereReader r = new BufferedReader(new FileReader(f));
String line=null;
do {
line=r.readLine();
} while(r!=null);
Je veux pour se moquer de cette opération afin que je puisse transmettre le contenu du fichier à partir du cas de test JUnit. Je l'ai fait ci-dessous:
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();
}
Donc en gros j'ai besoin de passer "line1", "line2" et "line3" comme les lignes du fichier qui sont lus par les moqué BufferedReader.
Cependant, au moment de le faire, qu'il se trompe jamais comme NullPointerException lors de la tentative d'instancier new FileReader(f) de la partie.
Donc, est-ce parce que je ne peux pas se moquer d'un BufferedReader ou que l'approche est mal?
Grâce
Vous devez vous connecter pour publier un commentaire.
Vous pourrez extraire une méthode pour faire la lecture, puis tester à la place. Cela voudrait dire que vous n'avez qu'à se moquer d'un seul lecteur. Par exemple, votre code devrait ressembler à ceci:
ensuite votre code de test serait plus comme la suivante:
new BufferedReader(new StringReader("line1\nline2\nline3"))
.Vous pouvez essayer PowerMock annotations. Vérifiez ceci : https://code.google.com/p/powermock/wiki/MockConstructor