質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
JUnit

JUnitは、Javaで開発されたプログラムのユニットテストを行うためのアプリケーションフレームワークです。簡単にプログラムのユニットテストを自動化することができ、結果もわかりやすく表示されるため効率的に開発時間を短縮できます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

3回答

19410閲覧

java IOExceptionのカバレッジを確保したい

nob777

総合スコア112

JUnit

JUnitは、Javaで開発されたプログラムのユニットテストを行うためのアプリケーションフレームワークです。簡単にプログラムのユニットテストを自動化することができ、結果もわかりやすく表示されるため効率的に開発時間を短縮できます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

1グッド

0クリップ

投稿2016/11/16 14:52

編集2016/11/16 14:56

以下のとおり、Windows環境でIOExceptionのカバレッジが確保できません。
何か方法はないでしょうか。

イメージ説明説明](70ef0d9940e124b7c227e2ca6e3c0d08.gif)

■環境情報
OS:Windows10
Eclipse:Neon 4.6.1
Java:Java8
使用プラグイン:JunitとEclEmma

以上、よろしくお願いいたします。

A-pZ👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

このIOExceptionを通すようなテストケースをWindowsで作るのはなかなか骨が折れる作業ではないかと思いました。

というのも、読み込み対象のFileが、読み込みすらできない状態(ファイルが存在することはチェックできる)にしないとならなく、または外部PCと共有しているファイルへのアクセスをして、アクセス権がない状態であればIOExceptionがスローされますが、そうなると環境依存の試験となり、単体テストの範疇から外れてしまいますねー。

なかなか難しい取り組みです。
モックオブジェクト作ればいけなくもないですが、そこまでする必要はあるのだろうか…という点は私も同意です。

投稿2016/11/17 15:07

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swordone

2016/11/17 15:27

興味本位で伺いますが、Windows以外だと可能なのですか?
nob777

2016/11/18 18:03

A-pZさん  > 外部PCと共有しているファイルへのアクセス  その方法がありましたか。ご教授ありがとうございます。思いつきませんでした。 swordoneさん  unix系の場合は、書込権限だけではなく、読込権限も制御できます。
guest

0

ベストアンサー

「カバレッジ」がよくわからなかったので調べてみましたが、そんなにこだわるべきポイントでしょうか?
BufferedReaderはデータ入力を抽象化したものであり、データの元について何も情報を持たないので、「何があるかわからないからとりあえずIOExceptionの処理しといて」ということで書かせているに過ぎません。なので、そもそも絶対に発生しない可能性もありえます。

簡単にIOExceptionを発生させる方法とは、readLineする前にソースのFileReaderか、BufferedReaderをクローズすることです。

参考→http://oshiete.goo.ne.jp/qa/1706712.html

投稿2016/11/16 15:13

swordone

総合スコア20649

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KSwordOfHaste

2016/11/16 15:26

納入するようなプログラムならばC0を確保するのが普通だったり一度も動かしていないパスがあったら責任問題になる場合もあります。そういった場合はこだわらざるをえませんね。しかしカバレッジに拘泥することにどれほどの意味があるかという意見には賛成です。
nob777

2016/11/16 15:41

ご回答ありがとうございます。単純なテストケースでのカバレッジ確保は難しいと理解しました。 特にc0 100%にこだわっているわけではなく、簡易な方法で確保ができる方法があるかどうかを確認したく、質問させていただきました。
guest

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
KSwordOfHaste

総合スコア18392

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swordone

2016/11/16 15:14

ファイルがない場合はその前のifで拾われると思います。
KSwordOfHaste

2016/11/16 15:20

なるほど。そうですね。他のプロセスで排他的にOpenとか若干面倒な方法になってしまいますね。
nob777

2016/11/16 15:41

ご回答ありがとうございます。例外処理すべきメソッドは呼び出し側という点はそのとおりだと思います。貴重なご指摘をいただき大変感謝しております。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問