Есть ли подобная тестовая библиотека для Python

Я работал со Спок и любил предложение "where", которое позволяет вам легко выполнять тестовый пример с несколькими входами и выходами. Например:

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

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

Есть ли что-то подобное для Python?

Ответ 2

Если у вас более нескольких тестов, я бы рекомендовал структуру BDD, например behave. Вы указываете синтаксис Герхарна, например (код из связанного учебника):

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 довольно просто, и в Интернете есть многочисленные примеры шаблонов. Красота в этом методе заключается в том, что ваш набор тестов очень многократно используется и может быть легко продлен не программистами.

Ответ 3

Нет, нет. Что печально, потому что Спок действительно превосходный. Я искал год и размышлял над тем, что потребуется, чтобы создать такой DSL на python, так как я так скучаю по нему.

Behave и Lettuce получат вам синтаксис и идиомы стиля BDD, но вы должны поддерживать отдельные файлы шагов, соответствующие файлам сценария. Очевидно, что это отстой, когда вы хотите сделать TDD, но иметь читаемость BDD, что позволяет Spock.

Если вы также хотите, чтобы стиль стиля Spock был таким, Mox является ближайшим, который я нашел. Но опять же это плохая замена, как только вы испорчены Споком.

Ответ 4

Я также большой поклонник фреймворка Спока в мире Java/Groowy. В поиске похоже на Python. В своих поисках я нашел Нимой, которая выглядит очень многообещающе.

Пример с официальной страницы:

from nimoy.specification import Specification

class MySpec(Specification):

    def my_feature_method(self):
        with given:
            a = value_of_a
            b = value_of_b

        with expect:
            (a * b) == expected_value

        with where:
            value_of_a | value_of_b | expected_value
            1          | 10         | 10
            2          | 20         | 40

И там также автор сообщения в блоге, почему он родился.