PythonでBDDを練習する[終了]


133

ビヘイビア駆動開発を実践するためにPythonで利用できる最も高度なフレームワークとツールはどれですか?特に、ルビー用のrspecおよびmochaと同様のツールを見つけることは素晴らしいことです。


1
Flowpは、「最小限のマジックでRSpec BDDスタイルでテストを書くことができます」。
カールG

7
SOでのみ、非常に有益な同等の「建設的でない」ことになります。
jeremyjjbrown 2014年

回答:


38

Ian Bickingは、ビヘイビア主導の設計にdoctestを使用することを推奨しています。

私は個人的に、振る舞い主導の設計スタイルでボイドスペースのモックを使用する傾向があります。具体的には、鼻のスペックプラグインはBDDに最適です。


7
Andrew Bennettsは、doctestが悪用されたと考える理由について、いくつかの投稿を最近書きました。andrew.puzzling.org/diary/2008/October/23/narrative-tests andrew.puzzling.org/diary/2008/October/24/more-doctest-problems
ddaa

4
doctestは、意図したとおりに扱うと、実際にはBDDの哲学とより整合していると思います。ソフトウェアについて書き始め、それをテストを形成する例と組み合わせます。これは「ドキュメント駆動型開発」とも呼ばれています。重要なのは、内部の作業単位ではなく、外部から記述可能な機能に焦点を当てることです。xUnitの伝統はそれをすることで恐ろしいと思います。
ianb 2009

48

レタスは、Pythonのキュウリのようなツールであることを意味します。http://lettuce.it/

ソースはgithub.com/gabrielfalcao/lettuceで入手できます。


これを書いている時点で、レタスを検討しているWindowsユーザーは、そのOSのサポートが簡単ではないことを知っている必要があります。
leonigmig 2011年

7
djangoでレタスを使用するユーザーは、デフォルトで、テストにデフォルトのデータベースを使用することに注意してください。この興味深い設計の選択は、私に1つの生産データベースのコストをかけました:(
Rachel

3
Behaveのように、レタスにはいくつかの代替手段があります。ここにあるそれらを比較するブログ記事は、と振るまいを提唱します
ドリフトキャッチャー

1
@seafangsに感謝-Behaveは、Lettuceよりも大規模なプロジェクトで扱いやすいように見えます。
jamesc 2013年

djangoを使用している場合は、Letuceを使用する時間を節約してください。現在のバージョン2.19は最新のdjangoでは動作しません。
James Lin

46

私は本当に振る舞うことをお勧めします

Python用のCucumberクローンを探していたところ、レタスの使用を開始しましたが、かなり不器用に設計されたレプリカであることがわかりました。非常に非Pythonic。

それから私は振る舞いを発見し、それにとても満足しています。


11
djangoプロジェクトでのテストにデフォルトデータベースを使用するというデフォルトの動作により、ライブサーバー上の本番データベースにコストがかかったときに、レタスから動作するように切り替えました:(実際に動作するのが好きです。 djangoのテストフレームワークgithub.com/rwillmer/django-behave
Rachel

1
あなたの痛みを感じます。また、あなたの苦しみがジャンゴエコシステムの繁栄に貢献したことを嬉しく思います。;-)
John Wang、

1
機能ファイルなしで動作を使用できますか?私は非技術的なユーザーがいないので、それらを書くことは私にとってただの騒ぎです。誰かが私の与えられた/いつ/その後のテストを読むことができない場合、彼らはそこには何のビジネスもありません。
jeremyjjbrown 2014年

29

BDDおよびTDDの実践においてプログラマーを支援するために開発されたツールのセットを使用することをお勧めします。:このツールセットは、によって構成されてpycukesspecloudludibrioすべきである、DSL

Should-DSLはRSpecのような期待を与えます。RSpec期待APIでできることはすべて、should-dslでもできます。Githubから最新バージョンを入手できますます。

SpecLoudは、BDDのような単体テストの実行を支援します。あなたはそれをインストールすることができます

pip install specloud

Ludibrioはテストダブルス(モック、スタブ、ダミー)のライブラリです。経由でインストール

pip install ludibrio

そして、PyCukesはBDDのメインツールです。シナリオなどを実行します

pip install pycukes

詳細については、PyPiのツールドキュメントを参照してください


あなたの答えの詳細を探しながら、この便利な文書が見つかりました:arxiv.org/pdf/1007.1722
アミット

should-dslが好きです。私はpython BDD用のDSLを検討してきました-いくつかありますが、これは非常に表現力があるようです。
ダニーステープル2012年

PyramidというBDDフレームワークに関する情報を見つけることができません。@phaedrusによってリンクされた論文で参照されているリンクは、テストとは何の関係もない怪しげな外観のサイトにつながり、ウェブフレームワークであるPyramidをグーグルポイントで示しています。誰でも最新のリンクを提供できますか?
ビョルンPollex

1
私は確かにアサーションDSL を好みます。
fatuhoku

@BjörnPollex、Pyramidという名前は、Pyramid Web Frameworkのため、これらのツールの作成者は使用できませんでした。現在、それらは分離されたツールにすぎません。
ダグラスカマタ

11

素晴らしい投稿と回答。pycukesが廃止されたのを読んで、このリストにFreshenを含めるように更新したかっただけです。FreshenでBDDとDjangoを使用することについての良い投稿がここにあります


9

(RSpecと同様に)表現力のあるアサーションにシュアを使用できます


パラベン!あなたはmagic.pyのコードで私の心を完全に吹き飛ばしました。「拡張メソッド」(オープンクラス)がPythonで可能であることを知りませんでした。
mdwhatcott 2012年

8

Pyccuracyプロジェクトは、PythonのBDDにドメイン固有の言語を提供する取り組みです。

APIレベルで機能するdoctestとは異なり、Webページのロードやフォームの送信などの高レベルの操作をエンコードします。私はそれを使用していませんが、それがあなたが探しているものである場合、それはやや有望に見えます。



6

試してみてくださいpyspecsを。テストを読みやすくし、開発中に常に実行することは、このプロジェクトを作成する上での私の2つの主要な目標でした。

テストコード:

from pyspecs import given, when, then, and_, the, this

with given.two_operands:
    a = 2
    b = 3

    with when.supplied_to_the_add_function:
        total = a + b

        with then.the_total_should_be_mathmatically_correct:
            the(total).should.equal(5)

        with and_.the_total_should_be_greater_than_either_operand:
            the(total).should.be_greater_than(a)
            the(total).should.be_greater_than(b)

    with when.supplied_to_the_subtract_function:
        difference = b - a

        with then.the_difference_should_be_mathmatically_correct:
            the(difference).should.equal(1)

コンソール出力:

# run_pyspecs.py

  |  given two operands 
  |    when supplied to the add function 
  |      then the total should be mathmatically correct 
  |      and the total should be greater than either operand 
  |    when supplied to the subtract function 
  |      then the difference should be mathmatically correct 

(ok) 6 passed (6 steps, 1 scenarios in 0.0002 seconds)

4

私はおそらく完全にそのポイントを逃していますが、元のBDDペーパーについて私が保持したのは、BDDがいくつかのベストプラクティスを強調するためにTDDに再パッケージ化されただけであるということでした。

私の解釈が正しければ、xUnit実装でメソッドの名前を変更するだけでBDDフレームワークを取得できます。したがって、先に進んで標準ライブラリのユニットテストを使用してください。

編集:簡単なグーグルがチーズ屋の行動モジュールを表示しました。さらに検索 BDDのためには、何かが見つけられませんでした。


TDDはBDDとはまったく異なるスケールでの革命的な実践です。それでも、BDDスタイルでテスト駆動的に記述する方法に感謝するようになりました。
JtR 2008年

1
BDDはユニットレベルで開始されました。これは真実です。システムレベルの動作を含むように急速に成長し、コンテキスト、イベント、および結果がもう少し再利用可能になったため、非技術的な関係者との会話からキャプチャされた自然言語シナリオとその両方をサポートするツールが急増しました。この質問が行われたため、Feature Injectionを使用してBDDをプロジェクトビジョンレベルまで引き上げ、会話とドメイン言語による発見に同じように重点を置きました。まだ太陽の下で新しいものはありません。
Lunivore 2011年

私はbdd youtube.com/watch?v=pherUEzdJowについてのこの話が好きです。仕様を記述してテストとして使用するための良い方法を示します。
aisbaa
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.