web-dev-qa-db-ja.com

鼻vs pytest-私がどちらを選ぶようにするべき(主観的な)違いは何ですか?

私はかなり大きな(マルチスレッド)Pythonプロジェクト、負荷の(ユニット)テスト)で作業を開始しました。そこで最も重要な問題は、アプリケーションを実行するには事前に設定された環境が必要ですこれまでのところ、このマネージャー内でテストを実行するが、異なるテストモジュール間でコンテキストを切り替えることができない単体テストランナーのパッチバージョンを使用しました。

Noseとpytestは、多くの粒度でフィクスチャをサポートするため、このようなことをサポートします。したがって、noseまたはpytestへの切り替えを検討しています。これらのライブラリは両方とも「タグ付け」テストをサポートし、これらのタグ付きサブセットのみを実行します。これも私たちがやりたいことです。

私は鼻とpytestの両方のドキュメントを少し調べてきましたが、それらのライブラリの大部分は本質的に同じ機能をサポートしていますが、名前が異なるか、わずかに異なる構文が必要な場合があります。また、利用可能なプラグインのいくつかの小さな違いに注意しました(noseはmultiprocess-supportを持っています。pytestは例えばそうではないようです)

だから、悪魔は詳細にあるようです、それは(多くの場合)個人的な趣味を意味し、私たちは私たちの個人的な趣味に最も合った図書館に行くのが良いでしょう。

そこで、私たちのニーズに最適なライブラリ/コミュニティのコンボを選択するために、なぜ鼻かピテストを選ぶべきかという主観的な議論を求めたいと思います。

76

ノーズはPylonsのデフォルトであるため、以前はノーズを使用していました。私はそれがまったく好きではありませんでした。複数の場所に設定テンディルがあり、事実上すべてが、より間接的で混乱を招く文書化されていないプラグインで行われているように見えました。また、デフォルトで単体テストテストを行っていたため、Unicodeトレースバックで定期的に壊れ、エラーの原因を隠していました。

ここ数年、py.testにはかなり満足しています。すぐにassertでテストを書くことができるので、テストを書くのが嫌になりますway less、そしてコアの上で必要なものをハックするのはとても簡単です。固定のプラグインインターフェイスではなく、フックの山があり、さらに掘り下げる必要がある場合は、かなり理解しやすいソースコードです。私はpy.testの下でTestifyテストを実行するためのアダプターを作成しましたが、py.testよりもTestifyで問題が発生しました。

そうは言っても、noseにはクラスレステスト用のプラグインがあり、最近はイントロスペクションをアサートしていると聞いているので、どちらでも問題ないでしょう。それでも、py.testで実行できるようになった気がします。また、壊れたときに何が起こっているのかを理解できます。

74
Eevee