2012-06-12 17 views
9

He trabajado con Spock y me encantó la cláusula 'dónde', que le permite ejercitar fácilmente el caso de prueba con múltiples entradas y salidas. Por ejemplo:¿Hay una biblioteca de pruebas tipo Spock para Python?

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 
    } 
} 

¿Hay algo similar para Python?

+0

¿Le parece útil las siguientes respuestas? –

Respuesta

3

PYtest le permite 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

Si usted tiene más de unas pocas pruebas, recomendaría un marco BDD como behave. Se especifica una, por ejemplo (código del tutorial vinculados) Gherkin syntax:

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" 

Y un código Python para analizarlo, por ejemplo:

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

escribir el código Python es bastante fácil, y hay numerosas ejemplos de código repetitivo en línea. La belleza de esta técnica es que su suite de pruebas es altamente reutilizable y puede ser extendida por no programadores con bastante facilidad.

2

No, no lo hay. Lo cual es triste porque Spock es realmente excelente. Hace un año que estoy buscando y he reflexionado sobre lo que se necesitaría para crear un DSL como este en Python, ya que lo extraño tanto.

Behave and Lettuce le proporcionará la sintaxis y las expresiones idiomáticas del estilo de BDD, pero debe mantener archivos de pasos independientes que coincidan con los archivos de su escenario. Obviamente esto apesta cuando quieres hacer TDD pero tienes la legibilidad de BDD que es lo que Spock habilita.

Si también quiere burlarse del estilo Spock, entonces Mox es lo más parecido que he encontrado. Pero, de nuevo, es un mal sustituto una vez que Spock te mima.

Cuestiones relacionadas