3

比較的単純な SSL サーバーを Twisted で実行しているので、ユニット テストをいくつか書きたいと思います。Python 3 を使用する場合にこれを行う最善の方法がよくわかりません。私が見つけたすべてのドキュメントは、残念ながら Py3k では不完全な Twisted Trial の使用について説明しています。

私が考えているのは、次のようなことです。

  • 私のコードをロードし、すべてを実行しますが、reactor.run()
  • コードで処理したいデータを送信する
  • 実行しますreactor.doIteration()(または、reactor.iterate()より良いですか?)
  • サーバーが想定どおりに動作したことを確認してください

これは、この種の状況を処理する正当な方法ですか?

編集:

これは悪い考えかもしれないというグリフからの回答(ただし、特にテストについて話しているわけではありません)

編集2:

主な問題は、Twisted と絡み合ったコンポーネントをテストしようとしていて、それを引き離して個々のコンポーネントを適切にテストする方法がわからない場合だと思います。これをテストする信頼できる方法はありますか?.run()を呼び出して、アクションを完了してから数秒後に実行されるイベントを挿入して、リアクターを停止し、結果をテストする必要がありますか?

4

1 に答える 1

1

低レベルのネットワーク コードを書いていますか? アプリケーションは BSD ソケット API とやり取りしますか? そうでない場合、なぜテストでリアクターを実行したいのですか? 単体テストでは、明確に定義された狭いコード セットを実行する必要があります。これはアプリケーション コードであるべきです - Twisted での TLS トランスポートの実装ではありません。

reactor.iterate単体テストまたは他の場所でを呼び出すという考えに具体的に対処するには: はい、それは悪い考えです。これは、Twisted 自体がテストされる方法ではありません。reactor.iterate呼び出したときに機能するコードを作成すると、代わりに呼び出したときに機能するため、それを期待する理由はありませんreactor.runreactor.iterateイベントループを他のシステムと統合する方法についての誤った考えからの残り物です。のアイデアが正しくて便利な極端なエッジケースが 1 つまたは 2 つあるかもしれませreactor.iterateんが、実際には、そのようなケースで Twisted を使用する人は誰もおらず、Twisted で作業する人は誰も変更を加えるときにそれらを念頭に置いていません。したがって、これはアプリケーションを配置したい場所ではありません。物事がうまくいかないとき、あなたはとても孤独になります。

于 2014-07-07T21:03:24.327 に答える