1. ホーム
  2. python

[解決済み] nose vs pytest - どちらを選ぶべきかという(主観的な)違いは何ですか?[クローズド]

2023-05-10 05:03:40

質問

私は、たくさんの(ユニット)テストを含む、かなり大きな(マルチスレッドの)Pythonのプロジェクトに取り組み始めました。そこでの最も重要な問題は、アプリケーションの実行が、コンテキストマネージャによって実装されるプリセット環境を必要とするということです。これまでのところ、私たちは、このマネージャー内部でテストを実行するユニット テスト ランナーのパッチを当てたバージョンを使用しましたが、それは異なるテスト モジュール間でコンテキストを切り替えることを可能にしません。

noseとpytestの両方は、多くの粒度でのフィクスチャをサポートしているので、そのようなことをサポートしています。これらのライブラリはまた、テストの「タグ付け」をサポートし、これらのタグ付けされたサブセットのみを実行するでしょう。

私はnoseとpytestの両方のドキュメントに少し目を通しましたが、私が見る限り、これらのライブラリの大部分は、名前が異なっていたり、わずかに異なる構文を必要としたりすることを除いて、本質的に同じ機能をサポートしています。また、私は利用可能なプラグインにいくつかの小さな違いを指摘しました(noseはマルチプロセスをサポートしていますが、pytestは例えばそうではなさそうです)。

つまり、悪魔は細部に宿り、それは(少なくともしばしば)個人の好みを意味し、私たちの個人的な好みに最も合うライブラリに行く方がよいようです。

ですから、私たちのニーズに最も合うライブラリ/コミュニティの組み合わせを選択するために、なぜ私はnoseまたはpytestを使用する必要があるのか、主観的な議論をお願いしたいと思います。

どのように解決するのですか?

Pylonのデフォルトだったので、Noseを使用していました。 私はそれがまったく好きではありませんでした。 複数の場所に設定の巻き戻しがあり、事実上すべてのことは文書化されていないプラグインで行われているようで、さらに間接的でわかりにくく、デフォルトで unittest テストを行うため、Unicode トレースバックで定期的に破損し、エラー ソースが隠されていました。

私はここ数年、py.testにかなり満足しています。 でテストを書くことができることです。 assert でテストを書けるので、テストを書くのが嫌になりました。 方法 そして、私が必要とするものを何でもコアの上にハックすることはとても簡単でした。 固定されたプラグインインターフェースではなく、フックの山を持ち、さらに掘り下げる必要があれば、かなり理解しやすいソースコードを持っています。 私は py.test の下で Testify のテストを実行するためのアダプタさえ書きました。そして py.test よりも Testify の方がより多くのトラブルを抱えていました。

とはいえ、最近はnoseにクラスレステストとアサートイントロスペクションのプラグインがあるそうなので、おそらくどちらでも大丈夫でしょう。 しかし、私はまだpy.testを使いこなすことができると感じていますし、壊れたときに何が起こっているのかを理解することができます。