Я пытаюсь протестировать метод в классе, который имеет конструктор следующим образом:
public class ResponseReader {
public ResponseReader(Socket client){
try {
bufferedReader = new BufferedReader(new InputStreamReader(client.getInputStream()));
fileWriter = new BufferedWriter(new FileWriter(createFile()));
} catch (IOException e) {
throw new RuntimeException("Could not initiate ResponseReader");
}
}
Метод createFile в конструкторе является частным:
private static File createFile() {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MMddhhmmss");
String dateAsString = simpleDateFormat.format(new Date());
File uartDataFile = new File("/root/Logs/" + dateAsString + "data.log");
LOG.debug("Created data file {}", dataFile);
return dataFile;
}
Когда Я пытаюсь протестировать метод из этого класса. Мне нужно создать новый объект и, следовательно, нужно имитировать экземпляры конструктора, прежде чем я создам макет класса:
private Socket client;
private InputStreamReader inputStreamReaderMock;
private InputStream inputStreamMock;
private BufferedReader bufferedReaderMock;
private ResponseReader responseReaderMock;
@BeforeEach
public void init() throws Exception {
inputStreamReaderMock = mock(InputStreamReader.class);
bufferedReaderMock = mock(BufferedReader.class);
inputStreamMock = mock(InputStream.class);
client = mock(Socket.class);
when(client.getInputStream()).thenReturn(inputStreamMock);
responseReaderMock = Mockito.spy(new ResponseReader(client));
PowerMockito.whenNew(BufferedReader.class).
withArguments(inputStreamReaderMock).
thenReturn(bufferedReaderMock);
}
Он работает до «new FileWriter (createFile ()) ) ". Может ли кто-нибудь посоветовать, как издеваться над частным методом, который используется в конструкторе? Поэтому мне нужно издеваться над этим методом, прежде чем я буду издеваться над классом.