Index: [Article Count Order] [Thread]

Date:  Fri, 15 Oct 2004 14:06:54 +0900
From:  FUKUDA Fumiki <fukuda.fm@....jp>
Subject:  [XP-jp:05073] DbC on Java/C#...
To:  extremeprogramming-jp@....jp
Message-Id:  <200410150511.i9F5BmN27653@....jp>
X-Mail-Count: 05073

επιστημηです。細かなネタで申し訳なし。

xUnitでテストするとき、通常はpublicなメソッドを呼んで
その結果を検証するわけですが、時としてメソッドを呼んだ後
'privateメンバが狂ってないか' あるいは 'privateメソッドは
正しく実装されたか' を知りたくなるのです。

Hoge を HogeTestでテストするとき、C++ならば

class Hoge {
private:
#ifdef TEST
public:
#endif
  テスト時に覗きたいメンバ
};

だとか

class Hoge {
  friend class HogeTest; // HogeTestには見せちゃる!
  ...
};

なんて姑息なワザが使えるけど、Java/C# の類ではアクセス限定子が
メンバ毎にくっつくので:

// C#
class Hoge {
#if TEST
public
#else
private
#endif
  int secret_value;
#if TEST
public
#else
private
#endif
  void secret_method();
  ...
}

なんてことになります。もう見てらんない。
なんぞ'ないす'なワザはありませんでしょうか?

# reflectionでハラワタ掻き出せばいいのはわかってます。
# やってはみたけどすっごく面倒。

テストできるように設計/実装しろ! てのもごもっとも。
ですが、ヘタすると隠すべきものをテストのためだけに
晒さなくてはなりませぬ。それはご勘弁ねがいたい、と。

-----:-----:-----:-----:-----:-----:-----:-----:-----:-----
FUKUDA (episteme) Fumiki -- magical, but never a magic...