- PR -

JUnitでstaticなクラス変数を確認したい

1
投稿者投稿内容
ohmy632
会議室デビュー日: 2003/09/19
投稿数: 4
投稿日時: 2003-09-19 02:32
JUnitでstaticなクラス変数を確認したいのですが、その方法で悩んでいます。
どなたか、ご存知の方がいれば教えてください。

例えば・・・

[テスト対象クラス]
public class Light{
 private static boolean isOn = false;
 public static void switchOn(){
  Light.isOn = true;
 }
 public static boolean isOn(){
  return Light.isOn;
 }
}

[テストケース]
public class LigthTest extends TestCase {
 public LightTest(String arg) {
  super(arg);
 }
 public void test_isOn_001(){
  //switchOnを行うとtrueを
  Light.switchOn();
  assertTrue("switchOnを行うとtrue",Light.isOn());
 }
 public void test_isOn_002(){
  //初期状態ではfalse
  assertFalse("初期状態ではfalse",Light.isOn());
 }
}

というクラスとテストクラスが存在したとします。
上記のようなテストを行う場合、test_isOn_001()とtest_isOn_002()の
JUintではテスト順序は保証されていませんから、

test_isOn_001()、test_isOn_002()

の順序でテストが行われてしまうと、どうしても”test_isOn_002()”は
失敗してしまいます。

回避方法として別々のテストケースクラスに記述することで対応できる
のですが、できれば保守性を考えて1クラスにつき1テストケースにし
たいと考えます。

test_isOn_002のメソッドに入った直後にLightを再ロードすればうまくいく
と思うのですが、これは、再ロードの方法自体がわからずに断念しています。

これをテストする方法をご存知の方がいたら知恵を貸してください。
よろしくお願いします。

[動作環境]
jdk1.4.1_02
junit-3.8.1


[ メッセージ編集済み 編集者: ohmy632 編集日時 2003-09-19 02:39 ]
いたち
常連さん
会議室デビュー日: 2003/04/25
投稿数: 27
投稿日時: 2003-09-19 08:58
はじめましてohmy632さん。

次のように、setUpで値を取り出しておいてtearDownで戻すというのはどうでしょうか?

public class LightTest extends TestCase {
 boolean savedValue;
 public LightTest(String arg) {
  super(arg);
 }
 public void testSwitchOn() {
  //switchOnを行うとtrueを
  Light.switchOn();
  assertTrue("switchOnを行うとtrue",Light.isOn());
 }
 public void testIsOn() {
  // 初期状態ではfalse
  assertFalse("初期状態ではfalse",Light.isOn());
 }
 protected void setUp() throws Exception {
  savedValue = Light.isOn();
 }
 protected void tearDown() throws Exception {
  Class clazz = Light.class;
  Field field = clazz.getDeclaredField("isOn");
  field.setAccessible(true);
  field.setBoolean(Light.class,savedValue);
 }
}
ohmy632
会議室デビュー日: 2003/09/19
投稿数: 4
投稿日時: 2003-09-19 14:01
こんにちは。

いたちさんの方法でうまくいきますね。
ありがとうございました。

・・・ところで、いたちさんはJUnitにお詳しいですか?
実は、もうひとつ悩みがありまして・・・。
それにつきましては、別スレッドをしばらくしたらたてるつもりです。
タイトルは、「JUnitはtestメソッドごとにスレッドをたてるのか?」
です。
よかったらこちらの方も見ていただけますか?
そして、もしおわかりになるようでしたらまた知恵を貸してください。

1

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