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

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

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

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

Java

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

Q&A

解決済

1回答

7023閲覧

JUnitを使い、Coberturaでカバレッジ計測をしたいのですが?

gyro16

総合スコア89

JUnit

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

Java

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

0グッド

0クリップ

投稿2016/03/16 06:47

編集2016/03/16 08:15

JUnitを使い、Coberturaでカバレッジの計測をしたいのですが。

junit-4.12.jar
hamcrest-core-1.3.jar

以下略名junit-4.jar、hamcrest-core-1.jar

コンパイル時

javac -cp .;junit-4.jar;hamcrest-core-1.jar Account.java AccountTest2.java

実行時

java -cp .;junit-4.jar;hamcrest-core-1.jar org.junit.runner.JUnitCore AccountTest2

JUnitはhamcrest-coreがないとうまく行きません。
コンパイル時はともかく、実行時に一緒にクラスパスを通さないと期待通りの結果になりません。
ネットで調べたらJUnitはhamcrest-coreと依存関係にあるということです。

この方法できます。
上記のように打ち込むと期待通りに実行できます。
以降は、これに則ってやっていくしかないのですが、

カバレッジの計測が出力できません。

Coberturaのサイトは以下に
cobertura.github.io/cobertura/に飛びます。
cobertura2.1.1はバージョンです。

カバレッジの計測

手順(1)テストクラスのカラクリの仕込み

javac -cp .;junit-4.jar;hamcrest-core-1.jar Account.java AccountTest2.java
c:\cobertura-2\cobertura-instrument.bat AccountTest2.class

手順(2)仕込み済みのテストクラスの実行

java -cp .;junit-4.jar;hamcrest-core-1.jar org.junit.runner.JUnitCore AccountTest2

Exception in thread “main” java.langNoClassDefFoundError :
net/sourceforge/cobertura/coveragedata/TouchCollector

このエラーが出て実行できません。
Coberturaのバッチで改造したクラスファイルが実行できません。
Coberturaのバッチで改造する前のクラスファイルは実行でき、テスト成功します。

困っています。
コマンドラインから、JUnitを使い、Coberturaでカバレッジの計測をしたいのですが、
計測のためCoberturaのバッチでクラスファイルを改造して実行してカバレッジを計測するのですが、改造したクラスファイルがエラーになり実行できません。

Coberturaが使いこなせません。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Cobertura詳しくないので、あまり自信がありませんが。

改造したテストコードの中で、TouchCollectorというCobertura固有のクラスを使用しているのではないでしょうか。
その場合、実行時のクラスパスにそのクラスを含むJARファイルもクラスパスに通す必要があります。
また、Coberturaが参照するライブラリーもクラスパスに通す必要があります。

以下のようにしてみてください。

java -cp .;C:\cobertura-2\cobertura-2.1.1.jar;C:\cobertura-2\lib\* org.junit.runner.JUnitCore AccountTest2

*のところはワイルドカードで、ディレクトリー以下のJARファイルをすべてクラスパスに追加する記法です。
こうすると、junit-4.jarhamcrest-core-1.jarの指定も兼ねるので、個別に指定する必要は無くなります。

投稿2016/03/18 05:22

編集2016/03/18 10:35
argius

総合スコア9390

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

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

gyro16

2016/03/18 09:37

>c:\cobertura-2\cobertura-instrument.bat AccountTest2.class これはできます。 >java -cp .;junit-4.jar;hamcrest-core-1.jar;cobertura-2.jar org.junit.runner.JUnitCore AccountTest2 Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory at net.sourceforge.cobertura.caveragedata.TouchCollector.<clinit>(TouchCollector.java:40) こうなります。 Coberturaのjarにもパスは通しています。 Coberturaのコマンドの使い方が分かりません。
argius

2016/03/18 10:39

回答を修正しました。 NoClassDefFoundErrorが出るのはたいていクラスパスが通っていない時です。 手順(2)とコメントのエラーはそれぞれ、 net.sourceforge.cobertura.coveragedata.TouchCollectorクラスが所属するJARファイルがクラスパスに無い、 org.slf4j.LoggerFactoryクラスが所属するJARファイルがクラスパスに無い、 というエラーです。
gyro16

2016/03/18 23:39

ありがとうございます。テスト実行はでき、テストOKです。 ですが、次のHTMLにレポートを出力するができません。 ソースファイル、クラスファイル、cobertura.serなどをc:\workにコピーしておき、c:\reportにHTMLを出力したいのです。 Cobertura CoberturaのlibディレクトリにJUnitとhamcrest-core-1のJARファイルのコピーして置く >javac -cp .;junit-4.jar;hamcrest-core-1.jar Account.java AccountTest2.java コンパルできます >c:\cobertura-2\cobertura-instrument.bat AccountTest2.class Coberturaでクラスファイルを改造できます >java -cp .;c:\cobertura-2\cobertura-2.jar;c:\cobertura-2\lib\* org.junit.runner.JUnitCore AccountTest2 テスト実行でき、テストOKです。 この先のHTMLに出力するcobertura-report.batがうまくできません。 >c:\cobertura-2\cobertura-report.bat -destination c:\report c:\work Error: destination directory must be set >c:\cobertura-2\cobertura-report.bat --destination c:\report c:\work ファイル名、ディレクトリ名、またはボリュームラベルの構文が間違っています。 エラーになります。HTML出力したいですが分かりますか?
argius

2016/03/19 01:45

2番目のコマンドでできるはずですけどね。 英語ですが、下記ページのReportingのところにコマンドの使い方が書いてあります。 Command Line Reference · cobertura/cobertura Wiki https://github.com/cobertura/cobertura/wiki/Command-Line-Reference c:\report c:\work のディレクトリーは既に存在していますよね? あと、たぶん関係ないと思いますが、 c:\のところを、C:\にしてみたらどうなりますか? Windowsのバージョンが違うからかなあ。 私はWindows7です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問