I am trying to mock FileWriter and BufferedWriter constructor APIs. Whenever I try to mock FileWriter API, I see a NPE exception in my stack trace. I don't know what I am doing wrong, and I hope that someone can help.
The exception stack trace is given below.
java.lang.NullPointerException
at java.io.Writer.<init>(Writer.java:99)
at java.io.OutputStreamWriter.<init>(OutputStreamWriter.java:115)
at java.io.FileWriter.<init>(FileWriter.java)
at com.boa.service.EmployeeServiceTest.writeToFile(EmployeeServiceTest.java:206)
at com.boa.service.EmployeeServiceTest.testWriteToFile_Success(EmployeeServiceTest.java:201)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.lang.reflect.Method.invoke(Method.java:613)
The source code is given below:
void writeToFile(String filename, Set<Employees> employees) {
try(
Writer writer = new FileWriter(filename);
BufferedWriter writer = new BufferedWriter(writer);) {
for (Employee employee : employees) {
StringBuilder sb = new StringBuilder();
sb.append(employee.getLastName()).append(", ").
append(employee.getFirstName()).append("\n");
writer.write(sb.toString());
}
} catch (IOException e) {
throw new IOException(
"unable to write to file : " + filename, e);
}
}
My Unit test is given below
@Test
public void testWriteToFile_Success()
throws Exception {
FileWriterMock wMock = new FileWriterMock();
BufferedWriterMock bwMock = new BufferedWriterMock();
Employee employee = new Employee("firstName", "lastName");
Set<Employee> employees = new TreeSet<>();
employees(employee);
this.writeToFile("test-filename.csv", employees);
}
class FileWriterMock extends MockUp<FileWriter> {
String filename;
@Mock
public void $init(String filename) {
System.out.println("writer constructor");
this.filename = filename;
}
}
class BufferedWriterMock extends MockUp<BufferedWriter> {
private int writerCount = 0;
public int getWriterCount() {
return writerCount;
}
@Mock
public void $init(Writer writer) {
System.out.println("buffered writer constructor");
}
@Mock
public void write(String str) {
this.writerCount ++;
}
}
I have tried to use jMockit's Faking Tutorials in this example. However, I don't know what I am doing wrong. Any advice would be gratefully appreciated.
Thanks
Aucun commentaire:
Enregistrer un commentaire