2011-03-17 8 views

答えて

8

gfの可視外ではないので、私は、少なくともしない反射することなく、何あえて:

例えば、以下のコードでg()をテストする方法はありません。

gのテストでは、実装の詳細はテストするべきではなく、公開されたAPIの動作のみをテストすべきであるため、単体テストという概念は壊れてしまうと思います。 fのテストが失敗した場合、エラーをgで追跡することはデバッグプロセスの一部です。

gのテストが重要な場合は、fの外側にある(保護された)メソッドとしてgを定義してください。しかし、それはあなたのデザインを破る可能性があります。

gの呼び出し後に元のコードでassertに電話をかけることも考えられます。これはテスト中に実行され、プロパティが保持されていない場合は例外が発生し、テストが失敗します。それは通常のコードでも存在しますが、assert(およびコンパニオン)が削除可能であるため、コンパイラによって削除できます(例:hereを参照)。

+2

+1:私は完全に同意します。 * 'g()'を呼び出すことはできないので、気にする必要はありません。 '' f() 'が正しく動作する限り、その細部が何であるかは関係ありません。 'g'を定義し、それを呼び出す、またはコードをインラインで実行するだけの概念上の違いはありません。コードの正しさとは無関係な内部の帳簿管理の手段です。 'f'はunicornを取得して結果を魔法のように計算することで動作する可能性があります。結果が正確でタイムリーな方法で(かつ外部からの依存性がなくて)到着している限り、それは単体テストの仕事ではない。 –

+1

@AndrzejDoyleしかし、私はちょうど開発をスピードアップ(デバッグを避ける)し、すべてを段階的にテストしたいと思えば...私はこの問題がhttp://stackoverflow.com/questions/34571/whats-the-proper-プライベートメソッドを使用してクラスを使用してテストする方法 – ichaki5748

+2

私は自分のコードをテストします。そして、たとえそれが公的契約の一部にならなくても、テストはロジックを洗練するのに役立ちます。この場合、私のテストは契約を守ることではなく、開発援助です。私はちょうど関数の外で関数を開発し、論理を終えた後にそれを再配置することができると思います。 – chad

関連する問題