2012-06-12 7 views
9

私はSpockと協力して、 'where'節を愛用しています。複数の入出力でテストケースを簡単に実行できます。例:Python用のSpockライクなテストライブラリがあります

class HelloSpock extends spock.lang.Specification { 
    def "length of Spock's and his friends' names"() { 
     expect: 
      name.size() == length 

     where: 
      name  | length 
      "Spock" | 5 
      "Kirk" | 4 
      "Scotty" | 6 
    } 
} 

Pythonには何か類似点はありますか?

+0

以下の回答は役に立ちましたか? –

答えて

3

pytestあなたはparametrise a test functionすることができます:

import pytest 
@pytest.mark.parametrize(("input", "expected"), [ 
    ("3+5", 8), 
    ("2+4", 6), 
    ("6*9", 42), 
]) 
def test_eval(input, expected): 
    assert eval(input) == expected 
2

あなたはいくつかのテストよりも多くを持っている場合、私はbehaveのようなBDDフレームワークをお勧めします。

Scenario: some scenario 
    Given a set of specific users 
    | name  | department | 
    | Barry  | Beer Cans | 
    | Pudey  | Silly Walks | 
    | Two-Lumps | Silly Walks | 

When we count the number of people in each department 
Then we will find two people in "Silly Walks" 
    But we will find one person in "Beer Cans" 

そして、それを解析するためのPythonコード、例えば:

@given('a set of specific users') 
def step_impl(context): 
    for row in context.table: 
     model.add_user(name=row['name'], department=row['department']) 

Pythonコードを書くことは非常に簡単です、そして多数があるあなたはGherkin syntax、例えば(リンクチュートリアルからコード)を指定しますボイラープレートのコード例はオンラインです。このテクニックの美しさは、テストスイートが非常に再利用可能であり、プログラマー以外の人が非常に簡単に拡張できることです。

2

いいえ、ありません。 Spockは本当に優れているので、どちらが悲しいですか。私は1年前のことを探していて、PythonでこのようなDSLを作成するためには、それがとても恋しいから覚えています。

BehaveとLettuceはBDDスタイルの構文とイディオムを取得しますが、シナリオファイルに一致する別々のステップファイルを維持する必要があります。明らかに、これはTDDをしたいが、Spockが可能にするBDDの可読性を持っているときにはうんざりです。

Spockスタイルのモックもご希望の場合は、Moxが私が見つけたものの中で最も近いものです。しかし、再びあなたがSpockに甘やかされると、それは貧しい代理人です。

関連する問題