クラス/オブジェクトの内部配線をテストする必要がある場合、誰もが遭遇すると思います。コンパイルされた言語では、これは条件付きコンパイルによって行うことができます。これは私がJavaScriptのためにすべきことですか?そのようなタスクを達成するための通常の方法は何ですか?たぶん私はクラス/オブジェクトをブラックボックスとして扱い、その結果だけをテストするべきでしょうか?ユニットテストでは、私は内部ロジック(プライベートロジック)を頻繁にテストする必要がありますが、これのベストプラクティスは何ですか?
1
A
答えて
2
試験対象の公約(つまり、あなたが言及したブラックボックステスト)ほとんどの時間は十分であるべきです。パブリックメンバーの適切なテストカバレッジは、プライベート/内部の大部分を同様に実行する必要があります。結局のところ、あなたのクラスのユーザ(他のプログラマ、他のオブジェクト/共同作業者)は、あなたのオブジェクトが何をするのを気にするのでしょうか?
内部をテストする必要性が高いときには、改善の機会として扱います。通常、このようなニーズは、code communicatingの結果です。「私は非公開にしてはいけません」、「別の人に私をリファクタリングする価値があるかもしれません」
また、内部のテストでは、より脆いというテストが行われることに注意してください。あなたのオブジェクト/クラスの機能(契約)は変わらないかもしれませんが、実装はかなり頻繁に変わるかもしれません。自分のコードをサードパーティ製/外部ライブラリと置き換えることを考えてください(かなり一般的な変更) - これがテストを中断する理由ですか?そうではない。
私は時々あなただけの内部をテストする必要が実現する - しかし、IMO、それはその後、停止して、あなたのコードを改善することができるかどうかだと思う方が良いでしょう(非常に頻繁にすることができます実際にあなたを見つけることができます!)。他のすべてが失敗したときの最後の手段として、テスト内部をテストします。
関連する問題
- 1. ユニットテストphpアプリケーション(私は何をテストする必要がありますか?)
- 2. EFコンテキストをより頻繁に廃棄する必要がありますか?
- 3. Cakephp 2.1.1での内部サーバエラーが頻繁に発生する
- 4. 問題を解決するために頻繁にスマートパブリッシュする必要があるのはなぜですか?
- 5. 私のASP.NET MVC3プロジェクトで何をテストする必要がありますか?
- 6. 私はJavaをテストする必要があります
- 7. 私はこれを同期する必要があります
- 8. File.expand_path(...、__FILE__)がベストプラクティスである必要がありますか?
- 9. 私はこれよりも頻繁ような何かをする必要があるのstdとのstd ::バインド:: shared_ptrの
- 10. SpringMVC3.2ユニットテスト用にインポートする必要があるものは何ですか?
- 11. Android Debug Bridge(adb)を頻繁に再起動する必要があるのはなぜですか?
- 12. ターゲットディレクトリには何を入れる必要がありますか?
- 13. ファイルを開いたままにしておくか、頻繁に開閉する必要がありますか?
- 14. 私のテストにコメントする必要がありますか?
- 15. 私のIBackingStoreはスレッドセーフである必要がありますか?
- 16. ユニットテストでAutoMapperを使用する必要がありますか?
- 17. ロジックがトリガアクションまたはエントリに入る必要がありますか?
- 18. ユニットテストを構成するテストは、特定の順序で実行する必要がありますか?
- 19. publicな内部クラスをテストする必要がありますか?
- 20. Androidのアダプターは、静的内部クラスまたは非静的内部クラスである必要があります
- 21. 私はMysqlのクエリを実装するロジックが必要です
- 22. アンドロイドデベロッパーが知る必要があることは何ですか?
- 23. Unixスクリプトでロジックを追加する必要があります。
- 24. MySQL、別のテーブルで最も頻繁な値を持つ行を選択する必要があります
- 25. JUnitテストは重複する必要がありますか?
- 26. 私はmyClickHandler()関数に何かを追加する必要があります
- 27. MySQLサーバを頻繁に切断/再接続する必要がありますか?
- 28. RSpecのテスト:それは{respond_to必要があります()}
- 29. ビューモデルにロジックが含まれている必要がありますか?
- 30. このフィールドはvolatileにする必要がありますか?