Index: [Article Count Order] [Thread]

Date:  Sat, 23 Sep 2000 13:49:04 +0900
From:  Kaoru Hosokawa <khosokawa@....com>
Subject:  [XP-jp:00917] Re: テストのためだけのメソッド
To:  extremeprogramming-jp@....jp (extremeprogramming-jp ML)
Message-Id:  <B5F24F00.39DA%khosokawa@....com>
In-Reply-To:  <00Sep15.154151jst.27780@....jp>
Posted:  Sat, 23 Sep 2000 13:46:41 +0900
X-Mail-Count: 00917

ホソカワです。

on 00.9.19 9:57 AM, Toru Koido at koido@....jp wrote:

> 久々に参加できそうなので、記入させていただきました。
> 小井土@オーエスケイです。
> #長い間ROMしていました。
> 
>>> そう、私も疑問に思っています。あまり厳格に決まっていないのでしょう。私
> は、テ
>>> ストも refactor の対象だと思っているので、きれいにするために helper 的な
> コー
>>> ドを追加することは必要だと思います。システムに対する YAGNI は、違反して
> いま
>>> すが、テストに関しては、(今テストコードをきれいにするために必要だから)
> 違反
>>> していないと思っています。
>> 
>> 現時点では、私は、テストのためだけのメソッドを追加することは
>> 反対の立場です。ただ、これは確固たる信念、あるいは理論武装
>> があってのことではなくて、直観的なものです。もしかしたら明日
>> には逆の意見を持っているかもしれません。
>> 
>> 本家のほうでは何か意見があるのでしょうか?
>> 
>> あるいは、このMLのメンバの意見もうかがってみたり、議論してみ
>> たいですね。
> 
> 私は、矢崎さんに賛成です。
> 
> 私は、テストとクラスは独立したものであることが重要だと考えます。
> 依存関係的には、テスト->クラスであって、この関係は物理的にも論理的も
> 崩すことはよくないと考えます。
> 
> テスト専用のメソッドを追加することは、この関係を論理的に壊していることに
> なるからです。
> 
> C++のようなコンパイラでは良く、デバック版とリリース版とわけてテスト用のメ
> ソッドを
> クラスに組み込むことは良くやっていますが、これではリリース版ではテストができ
> な
> いことになるのでXP的には論外と思います。
> 
> しかし、インスタンスに自分の状態をチェックするメソッドなどは、必ずしもテスト
> のため
> だけとは言えないので、OKということもありだとは思います。
> 
> いかがでしょうか。
> 

確かに、テストでしか使用されないメソッドがクラスに混じっているのは、コードが
読みづらくなって良くないと思います。そこで、テストでしか使用されないメソッド
を集めて、別途ヘルパークラスを作成することを考えてみました。

class TestConfigFile {
    public void setName(String name);
    // Other set... methods
    public void save(String filename);
}

このクラスは、set... メソッドを呼んだ後、save() するとコンフィグファイルを生
成します。これを使った createCorrectConfigFile() は、以下の様になります。

    private void createCorrectConfigFile(String filename) {
        TestConfigFile correctConfigFile = new TestConfigFile();
        correctConfigFile.setName("extremeprogramming-jp");
        // ...
        correctConfigFile.save(filename);
    }

これで、テストとクラスを分離できたと思います。

-- 
Kaoru Hosokawa
khosokawa@....com