期待どおりに動作しないテスト メソッドがいくつかあります。これらのシナリオでは、ログ メッセージをテキスト ファイルに書き込んでいます。
どちらの方法も、ファイルへの出力リンクを閉じて、それに書き込もうとしています。明らかにこれはIOException
、私のコードにも反映されていることを期待していることを意味します。
これらは、私が話している2つのテスト方法です
@Test(expected = IOException.class)
public void writeToClosedConnection() throws IOException {
LogHandler.getInstance().createNewChatlog("Jack");
LogHandler.getInstance().stopLogging(); // Closes the bufferedWriter
LogHandler.getInstance().writeToChatLog(new Message("Jim", "CAN'T WORK"));
}
@Test(expected = IOException.class)
public void closeStream() throws IOException {
log = new ChatLog(new GregorianCalendar(), "STANDARDTESTLOG", directory);
log.closeLogFile(); // Closes the bufferedWriter
log.addMessage(new Message("Jim", "CAN'T WORK"));
}
メッセージを書き込む両方の方法は、同じルートに属します。writeToChatLog
invokes はaddMessage
、writeToLogFile
メソッドを呼び出します。
この最後のメソッドは次のように定義されます
protected void writeToLogFile(String message) {
try {
if (logging) {
bWriter.write(message);
bWriter.newLine();
bWriter.flush();
} else {
throw new ForbiddenActionException("Logging is disabled");
}
} catch (IOException e) {
OutputUtil.showErrorMessage("Couldn't write to logfile", "IO error");
e.printStackTrace();
}
}
当面の問題は、IOエラーがスローされても(これの2倍:)
java.io.IOException: Stream closed
at java.io.BufferedWriter.ensureOpen(Unknown Source)
at java.io.BufferedWriter.write(Unknown Source)
at java.io.Writer.write(Unknown Source)
at io.Log.writeToLogFile(Log.java:41)
at io.ChatLog.addMessage(ChatLog.java:16)
at tests.ChatLogTest.closeStream(ChatLogTest.java:76)
ポップアップ メッセージ ( Couldn't write to logfile
) が表示されますが、まだ assertionError ( java.lang.AssertionError: Expected exception: java.io.IOException
) が発生します。
JUnit はバージョン 4 です。
なぜこうなった?