[#44431] コンストラクタの引数について&インスタンス変数の持ち方について — Akira Hayakawa <ruby@...>

度々オブジェクト指向についての質問ですいません。

17 messages 2008/01/04
[#44433] Re: コンストラクタの引数について&インスタンス変数の持ち方について — Yukihiro Matsumoto <matz@...> 2008/01/04

まつもと ゆきひろです

[#44469] pdf 作成 ライブラリ — "Luiz Aoki" <luizruby@...>

はじめまして、青木ルイスと申します、

14 messages 2008/01/12
[#44479] ファイル出力時のprintについて — m-hatake@... 2008/01/16

畠山と申します。

[#44483] format %g の丸めについて — 山崎雄介 <y-yamasaki@...>

山崎(ゆ)です。

14 messages 2008/01/16

[ruby-list:44448] 他のクラスに依存しているコードのテスト

From: とみたまさひろ <tommy@...>
Date: 2008-01-06 13:22:14 UTC
List: ruby-list #44448
とみたです。

あるクラス内で他のクラスを使用しているような場合、Test::Unit や RSpec
でどのように書くのが良いのでしょうか。

たとえば、プログラムが

class A
  def hoge()
    ...
  end
end

class B
  def fuga()
    a = A.new
    ...
    a.hoge(something)
  end
end

…というような構造の場合、クラス B のテストを書くのに、クラス A の内部
構造に依存したくありません。

Ruby なのでクラス B のテストコード中で、クラス A の内容を B のテスト用
に書き換えてしまうという方法もあると思いますが、そのようにしてしまうと、
Test::Unit::AutoRunner や RSpec の spec コマンド、rcov 等で複数のテスト
を1プロセスで実行しようとしたときに、問題になってしまうと思います。

B#fuga() の引数として、A オブジェクトを渡すようにしてしまうという手もあ
ると思います。

class B
  def fuga(a=nil)
    a ||= A.new
    ...
    a.hoge(something)
  end
end

こうすれば、外部から a を渡せるのでテストコードを書きやすくなるように思
うのですが、プログラム中にテストのためだけに必要なコードを書くというの
はどうなのかなぁ…と思ったりします。

TDD や BDD の考え方からいくと、テストコード(スペックコード)ありきなので、
問題ないのかなぁとかとも思ったり…。

みなさんはどのように書いているのでしょうか。

-- 
とみたまさひろ <tommy@tmtm.org>
3469 42CC 4D32 F53C AD98  65A5 8C37 FF09 69C1 6040

In This Thread

Prev Next