4

私は現在、趣味のプロジェクトでテスト駆動開発のプロセスを試しています。概念は理解していますが(最初に単体テストを作成し、失敗するのを見て、機能させる、コードをリファクタリングする)、まだいくつか質問があります。

私が取り組んでいるプロジェクトは、PythonのMUDクライアントです。現在、私はtelnetプロトコルの実装で忙しいです。(Pythonにはすでにtelnetlibがあり、Twistedには実装があることは知っていますが、それは重要ではありません)

現在、Telnetプロトコル(または少なくともその一部)とそのさまざまな単体テストを実装するクラスTelnetHandlerがあります。それらはかなり大きいので、pastebinにあります:TelnetHandlerユニットテスト

私の問題は次のとおりです。

  • 多くのテストは相互に依存しています。たとえば、test_handle_readテストが失敗すると、他の多くのテストも失敗します。
  • クラスが呼び出されることになっているメソッドを追加しTelnetOptionsTestsて、それらが呼び出されたかどうかを確認します(さまざまなlocal_option_enabledメソッド)。現在、クラスにはこれらのメソッドがありません。それらの存在を確認するためだけに単体テストを追加する必要がありますか?
  • テストを書き始めたとき、handle_readtelnetコマンドも解析するようにメソッドを変更しました。その後、テストを完了したら、handle_readをさまざまな_handle_do_handle_dontなどに分割します。ただし、元のテストであるため、それらの単体テストはありませんhandle_read。これは適切な方法ですか、それともメソッドを異なるメソッドに分割する場合にも単体テストを作成することをお勧めしますか?

基本的に、私が求めているのは、ユニットテストのスキルを向上させるのに役立つさまざまなヒントと指針です。

ありがとうございました!

4

1 に答える 1

4

多くのテストは相互に依存しています。たとえば、test_handle_read テストが失敗すると、他の多くのテストも失敗します。

これをしないでください。各テストの開始時に、世界を捨てて、そのテストを実行するための方法で再作成します。

テストを書き始めたとき、telnet コマンドも解析するように handle_read メソッドを変更しました。その後、テストが完了したら、handle_read をさまざまな _handle_do、_handle_dont などに分割します。ただし、元の handle_read でテストされているため、それらの単体テストはありません。これは適切な方法ですか、それともメソッドを別のメソッドに分割するときにも単体テストを作成することをお勧めしますか?

場合によります。分割すると、異なるパブリック メソッドに分割されましたか、それとも実装を処理するプライベート メソッドですか。

于 2012-08-24T15:13:32.980 に答える