以下のとおり、Windows環境でIOExceptionのカバレッジが確保できません。
何か方法はないでしょうか。
](70ef0d9940e124b7c227e2ca6e3c0d08.gif)
■環境情報
OS:Windows10
Eclipse:Neon 4.6.1
Java:Java8
使用プラグイン:JunitとEclEmma
以上、よろしくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
このIOExceptionを通すようなテストケースをWindowsで作るのはなかなか骨が折れる作業ではないかと思いました。
というのも、読み込み対象のFileが、読み込みすらできない状態(ファイルが存在することはチェックできる)にしないとならなく、または外部PCと共有しているファイルへのアクセスをして、アクセス権がない状態であればIOExceptionがスローされますが、そうなると環境依存の試験となり、単体テストの範疇から外れてしまいますねー。
なかなか難しい取り組みです。
モックオブジェクト作ればいけなくもないですが、そこまでする必要はあるのだろうか…という点は私も同意です。
投稿2016/11/17 15:07
総合スコア12011
0
ベストアンサー
「カバレッジ」がよくわからなかったので調べてみましたが、そんなにこだわるべきポイントでしょうか?
BufferedReaderはデータ入力を抽象化したものであり、データの元について何も情報を持たないので、「何があるかわからないからとりあえずIOExceptionの処理しといて」ということで書かせているに過ぎません。なので、そもそも絶対に発生しない可能性もありえます。
簡単にIOExceptionを発生させる方法とは、readLineする前にソースのFileReaderか、BufferedReaderをクローズすることです。
投稿2016/11/16 15:13
総合スコア20649
0
IOExceptionがどうしたら起こせるかという話でしょうか・・・
FileReaderならば対象のファイルがない状態でのテストケースを含めればカバレッジが確保できるのではないでしょうか。
蛇足:
ちなみにカバレッジを気にするよりIOExceptionの例外処理の中身がprintStackTraceでよいのか気になります。はっきりわかりませんが自分なら以下のように例外をthrowしたくなります(ファイル名の妥当性はメソッドのcallerの責任だから)。
java
1public static List<String> getFileData(String fname) throws IOException { 2 ... 3 try (...) { 4 ... 5 } 6}
投稿2016/11/16 15:08
編集2016/11/16 15:27総合スコア18392
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/11/16 15:14
2016/11/16 15:20
2016/11/16 15:41
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/11/17 15:27
2016/11/18 18:03