2011-10-27 7 views
1

私の状況は、いくつかの背景として:テストを簡単にする目的だけでコードを追加してもよろしいですか?

window.requestAnimationFrameを使用してアニメーションループを実行する小さなjavascriptライブラリを作成しています。この関数はブラウザ間で標準化されていないため、ライブラリの内部ではクロージャ内にポリフィル・アイ関数を作成します。

var requestAnim = window.requestAnimationFrame 
    || window.webkitRequestAnimationFrame 
    || ... 
    || function() { ... }; 

ここでの問題は、このコードを今すぐテストすることが非常に難しいことです。以前は、setTimeoutを使用していたときに、テストでそのグローバル関数をオーバーライドして、同期して渡すフレームの数をシミュレートしました。

とにかく、質問のポイントに:私のオプションは、テストされていない私のコードの一部を残して、またはの唯一の目的でライブラリに余分な機能を追加するためのどちらかであるように

今、それはそうですテストが容易になります。これらの選択肢のどちらも、私にとって素晴らしいことではありません。

一般にという特定のケースについて心配することなく、この状況で何をすべきですか?

答えて

4

はい、問題ありません。

私たちはテストのためにテストを書いていません。テストは、安全性チェックを行わずにコードを完全に記述して維持するには十分に輝かしいものではないという事実を認めています。すべてのテストコードは、より良い製品を作るために1つの目的と1つだけを提供します。これは、/ testフォルダまたは/ srcフォルダに存在するかどうかに関係なく適用されます。したがって、「これは決して生産では呼び出されないので、/ srcに入れるのは間違いです!」と考えるのは間違いです。

他のトレードオフがあります。 (組み込み製品では、/ srcフォルダを小さくするためにできることはすべて試してみるのが大変です)。しかしそれは単なる「テスト関連」とはまったく異なる理由です。

1

私は、テストコードを追加してもいいと思います(マイクロ最適化によってはテストしていないものがあります)。キリアンが言っているように、誰も完璧ではありません。これが最初にテストする理由です。

私は1Dキリアンの答えは+が、私はあまりにも自分のアイデアを追加したいと思います:テスト一般的に

を、どのような状況は、あなたができないコード(簡単に)があるでしょうか?これはテストマシン上で再作成できない条件でのみ実行されるコードでしょうか?おそらく、このコードを実行するかどうかを決める変数を設定する方が簡単です(ブレークポイントを設定し、デバッグ時にこの変数を変更することができます)。

またはあなたが言うように、いくつかのテストコードを追加してください - スクリプトの先頭にフラグを設定して、それをきれいに保つことができますか?それはテストの目的のためにコードを追加する大丈夫ですofcourseの:次に、あなたの文は、要するに

if(shouldRunThisCode || isTestingThisCode) { 
    doThisCode(); 
} 

ようなものになる可能性があります。私は、コードをテストする際には、多くのコードを追加する必要があるシナリオは考えられません。とにかくコードが実装されていて、特定の条件で実行されることを意図している場合は、テストするのが難しくありません。

+0

私が持っていた問題は、私のライブラリがユーザーに提示したインターフェイスをmuddyingすることでした。 – nickf

+0

あなたは特定のケースについて心配することなく質問しました;)リリースバージョンに含まれていないテストラッパーライブラリを書くことができますか? – Connell

0

一般に、テストするのが難しいコードはひどく書かれています。1「テストを簡単にする」というコードを追加するよりも、テストの難しさがあなたに伝えている問題を見つけることが優れています。とにかく、設計上の問題を修正するのが難しいと解釈するため、時にはそれを行うこともありますが、それは第2の選択肢でなければなりません。あなたのケースでは、あなたが公開している悪いデザインがあなたのコントロール外の図書館にあるように思えます。この場合、「テストを簡単にする」というコードを追加することがおそらく最良の選択です。その設計を改善するために外部ライブラリを十分に制御することはまずありません。

関連する問題