ホソカワです。
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