- PR -

JUnitでのテスト項目について。

投稿者投稿内容
KingSize
常連さん
会議室デビュー日: 2002/11/13
投稿数: 38
投稿日時: 2002-12-09 17:33
いつもお世話になっています。クボタです。

ただいまJUnitの動作を確認しています。
MVCのMの部分でDBを検索する処理があるのですが、このクラスをテストする場合、リクエストパラメータの値からSQL文を構築し、結果をVector(1要素が1レコード)に格納しているのですが、DB処理をしているクラスではDBの値を変えてしまうと帰ってくる結果が変わってきますよね?
こういう場合JUnitではどうテストすればよいのでしょうか?

あとJUnitはどれくらい使われているのでしょうか?
具体的にはJunitを使ったテストはテスト工程の何%くらいを占めているのか、ということです。

よろしくご教授お願いします。
へげもん
ベテラン
会議室デビュー日: 2002/04/14
投稿数: 87
お住まい・勤務地: 埼玉県
投稿日時: 2002-12-09 17:56
引用:

DB処理をしているクラスではDBの値を変えてしまうと帰ってくる結果が変わってきますよね?
こういう場合JUnitではどうテストすればよいのでしょうか?



JUnitのTestCaseクラスにはsetup()とteardown()というメソッドが対になってます。これらは各テストメソッドが呼ばれる度に前処理と後処理を実行するために使われます。
DBの更新がテストケースに入っている場合は、これらを使ってDBの内容を同じ状態に戻してやるといいでしょう。
サイズがそれほど大きくないのなら、毎回テーブルをDROPしてCREATEしなおすのでもいいかもしれません。サイズが大きければ、変更部分だけを戻してやらないと、えらく時間がかかるでしょう。

引用:

あとJUnitはどれくらい使われているのでしょうか?
具体的にはJunitを使ったテストはテスト工程の何%くらいを占めているのか、ということです。



テストの手順が決まっている場合には、ほぼ全てをJUnitでやってます。単体テストなら100%ですね。結合テストなどでも、ほとんど全てです。同じデータを何度も手入力するのは馬鹿らしいですから。
sakito
常連さん
会議室デビュー日: 2002/08/25
投稿数: 23
投稿日時: 2002-12-09 18:30
引用:

クボタさんの書き込み (2002-12-09 17:33) より:
ただいまJUnitの動作を確認しています。
MVCのMの部分でDBを検索する処理があるのですが、このクラスをテストする場合、リクエストパラメータの値からSQL文を構築し、結果をVector(1要素が1レコード)に格納しているのですが、DB処理をしているクラスではDBの値を変えてしまうと帰ってくる結果が変わってきますよね?
こういう場合JUnitではどうテストすればよいのでしょうか?


方法としてはへげもんさんの方法でいいのでは。
ただデータベース内容の変更が不可の場合もあるのでいろいろな場合があるようです。

引用:

あとJUnitはどれくらい使われているのでしょうか?
具体的にはJunitを使ったテストはテスト工程の何%くらいを占めているのか、ということです。


ぼくの場合ですが、まず第零次分析・設計のあと、分析結果にもとずいてテストを作成します。
分析・設計において必要な操作(メソッド)はすべて抽出されていて仕様もあるはずです。
そのメソッドの仕様にもとずきまだ存在しないクラスのテストを書くわけです。

そしてテストを実行します。当然すべて失敗します。
まあすべて失敗しないと異常ですから、すべて失敗することがこの場合正常です。
この初期のテスト記述により分析・設計の不備に気づくことがあります。
これにより第壱時分析・設計に戻ります。

次にテストが成功するようにメソッドを実装していきます。
再びこの過程で設計の修正が入る場合があり、テストの記述修正がはいるかもしれません。

まあこんな感じです。テストがかなり中心ですね、この方法だと。
#変更は柔軟にすべきですね。。仕様の根源が変化するのは問題ですが。
#また常にこいう事やってるわけでもないです。仕様の大きさや要件によります。

あくまでもテストは単なるテストではないです。
オブジェクト指向開発においてはテスト、実装、分析、設計は不可分な部分があり、シームレスに連携するものです。
どこからがテストで、どこからが実装とか分断するものの考え方はあまりよいとは思えません。

あくまでもこういう手法もあるよってことですが、参考までに。
あまぴょん
会議室デビュー日: 2002/01/28
投稿数: 12
投稿日時: 2002-12-10 00:44
引用:

MVCのMの部分でDBを検索する処理があるのですが、このクラスをテストする場合、リクエストパラメータの値からSQL文を構築し、結果をVector(1要素が1レコード)に格納しているのですが、DB処理をしているクラスではDBの値を変えてしまうと帰ってくる結果が変わってきますよね?
こういう場合JUnitではどうテストすればよいのでしょうか?



予定したSQLが生成されているかどうかをテストするという手も考えられますね。
KingSize
常連さん
会議室デビュー日: 2002/11/13
投稿数: 38
投稿日時: 2002-12-10 09:37
返事が遅れてしまい、申し訳ありません。
いろいろアドバイスありがとうございます。

こうしてみると、setup(), teardown()でテストごとに値が変わらないDBを用意してそれを使ってテストを行うみたいですね。

やはり、テスト項目としては、該当項目がない時や、検索範囲の際のチェックといったものになるのでしょうか?
ひろ
常連さん
会議室デビュー日: 2001/12/13
投稿数: 36
投稿日時: 2002-12-10 10:52
dbunitというのがありますね。
使ったことないのですが。

http://dbunit.sourceforge.net/index.html

[ メッセージ編集済み 編集者: ひろ 編集日時 2002-12-10 10:53 ]
H2
ぬし
会議室デビュー日: 2001/09/06
投稿数: 586
お住まい・勤務地: 港
投稿日時: 2002-12-10 17:08
引用:

クボタさんの書き込み (2002-12-10 09:37) より:
やはり、テスト項目としては、該当項目がない時や、検索範囲の際のチェックといったものになるのでしょうか?


ユニットテストでは上記のようなバウンドリー・例外チェックもしますが、普通処理がきちんとされているかテストするのも大事です。テスト対象のメソッドが普通に動くのかもテストしてみてください。
ひろ
常連さん
会議室デビュー日: 2001/12/13
投稿数: 36
投稿日時: 2002-12-11 02:05
JUnitに関して、サイトオーナーの方が実際の開発で使っている指針がまとめられています。
参考になるのではないでしょうか。私も非常に参考になりました。

http://member.nifty.ne.jp/masarl/article/junit.html

スキルアップ/キャリアアップ(JOB@IT)