言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

Squeakland イメージにテストケース入りのパッチを送る話。

Squeakland イメージにテストコード入りのパッチを送る時は、メソッドだけではなくクラス定義も含めなくてはいけない。

Squeakland イメージ、所謂プラグインスクイークのパッチを作りにくい原因のひとつが、テストケースを含んではいけないという制限だ。Squeakland イメージには、主にサイズ上に理由からいくつかのクラスが取り除かれているが、それに TestCase とそのサブクラス群も含まれているのだ。勿論、Squeakland は謂わば「リリース版」なので、そういうデバッグ用のコードを除くのは正しい判断なのだが、問題はその後のアップデートにある。

Squeakland のアップデート手順は以下の通り。まず開発者が開発イメージでパッチを作成し、squeakalpha ストリームに権限を持つ人がポストする。その後でバグが無い事が分かると、squeakland ストリームに同じコードがポストされ、リリース版に取り込まれる。ここで、開発時にテストコードを入れ込んでしまうと、ユーザがアップデートする際、テストクラスが無いのでエラーになる。

当初リリース版についてはこのエラーを無視する方向で作ろうと考えていたが、この際に発生する例外が MessageNotUnderstood という一般的過ぎる物なので、大変な事が分かった。ここで、逆転の発想として、エラーの起こる原因はクラス定義が無いからなので、クラス定義をパッチに含めれば良い事が分かる。本来パッチは差分のみを送るべきで、変更していないクラス定義までパッチに含めるのは気持ち悪いが、テストそのものを書かないよりもましだろう。