--.--.--

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

2010.01.23

第362夜 其の2

coberturaのお勉強1日目・・・。

納品も終わったので来週は5日ぐらい休んでやろうと思ってたら、納品の追加作業がやってきました(/ω\)
しかも今更そんなことをいうなって内容でして・・・。

休むどころかまた徹夜かも・・・。
この記事へのトラックバックURL
http://hexagram.blog41.fc2.com/tb.php/386-0fd0c567
この記事へのトラックバック
この記事へのコメント
Q.インストール方法は?

A.下記を参考にした。

※libの置き方について、ANT_HOME/lib/libみたいな置き方が書かれていたが、一括でlib配下に置いた。そのためbuild.xmlの書き方も合わせて変えた。

そもそもはANT_HOME/lib配下に全部置くものと思ったので、build.xmlの記述をみて誤記じゃない?と思ってた。

build.xmlの誤記ではなかったが、変な置き方なので、urlの記述通りには置かなかった。
それで何か問題がでたら置きなおせばよし。

ttp://beck.boo.jp/pukiwiki/java/JUnit/cobertura%A4%F2%BB%C8%A4%A6/

2010/01/24 追記
他のコメントでも書いたが、必要なjarをプロジェクトに置いて管理した方が、ANT_HOME/libに置くよりもよいと判断したので、ANT_HOME/libから削除した。

そのためbuild.xmlの該当箇所も記述がurlの記述とは異なっている。

ANT_HOME/libに置きたくない理由は後で忘れてしまうことが想定されるため。
新しいcoberturaを違う場所に置いてしまった場合、どれが参照されるか分からないし、プロジェクト毎にjarを入れて管理した方が簡単だと思ったため。

またプロジェクト毎にバージョンを変えたい場合もある(新しくすると動かなくなるとか)。
Posted by hexagram at 2010.01.23 14:29 | 編集
Q.build.xmlにcoverturaのタスクを入れたら警告がでるけど?

A.この警告はおそらくxmlの補完機能辺りが働かないだけで、クラスパスにcoverturaで使用するjar(5つかな)を通せば実行に支障はないと思う。

確かeclipseの設定でタスクの登録をしないといけなかった気がする。
今回は特に必要ではないので、気になるようなら別途コメントを登録して調べる。
Posted by hexagram at 2010.01.23 14:42 | 編集
Q.エラーは起きないけど、レポート結果がおかしいけど?

A.色々な原因があるのだろうけど、取り合えず分かった点を書く。

・antでクラスを作成する際にjavacのオプションにdebug="true"をつけないとうまく動かなかった。

・書き方が曖昧になってしまうけど、junitのタスクでcoberturaのクラスパスを設定する際にコンパイルのクラスパスと同じ定義を使用したらうまく動かなかった。
<taskdef classpathref="cobertura.classpath" resource="tasks.properties" />
とか何か関わってくるのだろうか? 今回は別々にクラスパスを定義して、それぞれで参照したらうまく動いた。

色々関連にして動いたり、動かなかったりしていると思うので、上に書いたことも間違っているかもしれないけど、記録として残しておく。

ちなみに現時点でのbuild.xmlはこんな感じ。
<?xml version="1.0" encoding="Shift_JIS"?>

<project name="javahelloant" default="clean" basedir="./">

<!-- プロパティ 開始 -->
<!-- libがあるディレクトリ -->
<property name="lib.dir" value="lib"/>

<!-- ソースファイルがあるディレクトリ -->
<property name="src.dir" value="src"/>
<property name="test.dir" value="test"/>

<!-- クラスファイルの出力先ディレクトリ -->
<property name="classes.dir" value="bin"/>
<property name="classes-test.dir" value="bin-test"/>

<!-- カバレッジ測定用のコードを埋め込んだクラスファイルの出力先ディレクトリ -->
<property name="instrumented.classes.dir" value="cobertura"/>

<!-- カバレッジレポートの出力先ディレクトリ -->
<property name="report.dir" value="report"/>
<!-- プロパティ 終了 -->

<!-- パス 開始 -->
<path id="classpath">
<fileset dir="${lib.dir}">
<include name="**/*.jar" />
</fileset>

<pathelement location="${classes.dir}"/>
</path>

<path id="cobertura.classpath">
<fileset dir="${lib.dir}">
<include name="**/*.jar" />
</fileset>
</path>

<taskdef classpathref="cobertura.classpath" resource="tasks.properties" />
<!-- パス 終了 -->

<!-- ターゲット 開始 -->
<!-- 生成したファイルやフォルダの削除 -->
<target name="clean">
<delete dir="${instrumented.classes.dir}" />
<delete dir="${report.dir}" />
<delete file="cobertura.ser" />
<delete>
<fileset dir="${classes.dir}" includes="**/*.class" />
</delete>
<delete>
<fileset dir="${classes-test.dir}" includes="**/*.class" />
</delete>
</target>

<!-- コンパイル -->
<target name="compile">
<!--
<javac source="1.5" target="1.5" debug="true" debuglevel="lines,vars,source" srcdir="${src.dir}" destdir="${classes.dir}" classpathref="classpath" />
<javac source="1.5" target="1.5" debug="true" debuglevel="lines,vars,source" srcdir="${test.dir}" destdir="${classes-test.dir}" classpathref="classpath" />
-->
<javac source="1.5" target="1.5" debug="true" srcdir="${src.dir}" destdir="${classes.dir}" classpathref="classpath" />
<javac source="1.5" target="1.5" debug="true" srcdir="${test.dir}" destdir="${classes-test.dir}" classpathref="classpath" />
</target>

<!-- カバレッジ測定用のコードを埋込 -->
<target name="instrument">
<cobertura-instrument todir="${instrumented.classes.dir}">
<fileset dir="${classes.dir}">
<include name="**/*.class" />
<exclude name="**/*Test.class" />
</fileset>
</cobertura-instrument>
</target>

<!-- junit実行 -->
<target name="junit">
<mkdir dir="${report.dir}"/>

<junit printsummary="on" haltonfailure="off">
<classpath refid="cobertura.classpath" />

<classpath location="${instrumented.classes.dir}" />
<classpath location="${classes.dir}" />
<classpath location="${classes-test.dir}" />

<classpath>
<fileset dir="${lib.dir}">
<include name="*.jar" />
</fileset>
</classpath>

<formatter type="xml" />
<batchtest fork="yes" todir="${report.dir}">
<fileset dir="${test.dir}">
<include name="**/*Test.java" />
</fileset>
</batchtest>
</junit>
</target>

<!-- レポート出力 -->
<target name="report">
<cobertura-report format="html" destdir="${report.dir}">
<fileset dir="${src.dir}">
<include name="**/*.java" />
</fileset>
</cobertura-report>
</target>
<!-- ターゲット 終了 -->
</project>
Posted by hexagram at 2010.01.23 21:58 | 編集
Q.ant/libにいくつかjarを置いたが、新しいバージョンに変える場合に何か問題あるか?

A.cobertura-1.9.3-bin.zipを導入した際、ANT_HOME/libに解凍したjarをいくつか置いた。
そのためcoberturaのバージョンを新しくする際に古いバージョンを削除する必要があるかもしれない。
ant自体のjarはantで始まっているので、何を追加で置いたのかは分かりやすいと思う。

2010/01/24 追記
プロジェクトのlibに置いてクラスパスを通せばANT_HOME/libに置く必要がなさそう。
置いたjarは削除したので上記は気にしなくてよい。
coberturaのjarを新しくしたければプロジェクトのlibディレクトリに置きなおせばよい(名前が異なる場合は古いjarは削除する必要があるだろう)。
Posted by hexagram at 2010.01.23 22:26 | 編集
管理者にだけ表示を許可する
 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。