鼻vspytest-私がどちらかを選ぶようにすべき(主観的な)違いは何ですか?[閉まっている]


85

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

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

私はnoseとpytestの両方のドキュメントを少し調べてきましたが、これらのライブラリの大部分は、名前が異なる場合や構文が少し異なる場合を除いて、基本的に同じ機能をサポートしています。また、利用可能なプラグインにいくつかの小さな違いがあることに気づきました(たとえば、noseにはマルチプロセスサポートがあり、pytestはそうではないようです)

ですから、悪魔は細部にまでこだわっているようです。つまり、(少なくとも多くの場合)個人的な趣味であり、個人的な趣味に最も適したライブラリを使用する方がよいでしょう。

ですから、私たちのニーズに最適なライブラリ/コミュニティの組み合わせを選択するために、なぜ私が鼻やpytestを使うべきなのかという主観的な議論を求めたいと思います。


ここでも多かれ少なかれ同じ質問がされたことに注意してください-しかしそれは5年前なので、質問を再質問することは理にかなっていると思います
Jakob van Bethlehem

9
pytestpytest-xdistプラグインを介したマルチプロセスサポートをサポートします。
ブルーノオリベイラ

2
余談として、コンテキストマネージャは単なるPythonのオブジェクトであり、あなたは呼び出すことができmanager.__enter__()、あなたの中にTestCase.setUp()、そしてmanager.__exit__()あなたにtearDown()
rescdsk 2014

回答:


80

Pylonsのデフォルトであるため、以前はNoseを使用していました。まったく気に入らなかった。それは複数の場所に構成の巻きひげを持っていました、事実上すべてが文書化されていないプラグインで行われているようで、それはすべてをさらに間接的で混乱させました、そしてそれはデフォルトでユニットテストテストを行ったので、それは定期的にUnicodeトレースバックで壊れ、エラーの原因を隠しました。

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

とは言うものの、最近ではnoseにクラスレステスト用のプラグインがあり、内省を主張していると聞いているので、どちらでも問題ないでしょう。でも、py.testを使って走り出すことができるような気がしますし、壊れたときに何が起こっているのか理解できます。


2
トレースバックの非表示に関するいくつかの問題は、何年も前に鼻0.11付近で修正されました。Python 3ポートなので、ユニコードのトレースバックの頻度は少ないと思います(個人的には、ノーズでユニコードの問題が発生したのは1回だけだと思います。これは、「トリック」を実行したテストケースの基本クラスと組み合わせると発生しました。 tは本当に理にかなっています-それは鼻のせいではないことが判明しました)。実のところ、どちらのツールも何年にもわたって荒削りな部分が
削ら

最近のドキュメントの部分はどうですか。また、nosetestsとpy.testのどちらを使用するのか混乱しています。どちらも同じように良いようですが、私が読んだように、ほとんどの人は最近ノーズテストを使用しています。py.testsが利用可能なマルチプロセッシングライブラリのより良いセットを持っている理由は何でしょうか?
proprius 2016年

1
@propriusそれは単にnosetestsが最初に来たということかもしれません。いくつかのフレームワークはそれのサポートを追加し、それらのフレームワークを使用するプロジェクトはデフォルトでそれを使用し、そしてそれは広がりました。また、py.testはnoseテストとunittestテストを実行できますが、通常のスタイルはクラスの周囲に配置されていないため、py.testへの移植は困難に感じるかもしれません。
イーブイ

4
私はpytestのドキュメントの部分を読み始めましたが、マルチプロセッシングの目的だけでなく、newbeeの学習の観点からも、pytestの方が適していることに気付きました。
proprius 2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.