2012-05-05 13 views
7

Digamos que tengo estas funciones de prueba:¿Cómo puedo omitir una prueba si falla otra prueba con py.test?

def test_function_one(): 
    assert # etc... 

def test_function_two(): 
    # should only run if test_function_one passes 
    assert # etc. 

¿Cómo puedo hacer para asegurar que sólo se ejecuta si test_function_two test_function_one pasa (que espero que es posible)?

Edit: Lo necesito porque la prueba dos está utilizando la propiedad que la prueba uno verifica.

+1

¿Puede explicar por qué es necesario esto? ¿La primera prueba configura algo que usa la segunda? Eso es generalmente malo. – loganfsmyth

+1

Esto es típicamente un signo de una prueba frágil, una prueba que depende de más cosas que la unidad que evalúa, ¿está seguro * de que debe hacer esto? Sería (probablemente) mejor refactorizar la prueba y/o el código bajo prueba para evitar esta dependencia. –

+0

@loganfsmyth No, la primera prueba no está configurando nada, pero la segunda prueba * usa * la propiedad que la primera prueba verifica. –

Respuesta

0

creo que esto es lo que quiere:

def test_function(): 
    assert # etc... 
    assert # etc... 

Esto cumple con su requisito de que la segunda "prueba" (afirmación) sólo se ejecuta si el primer "test" (afirmación) pasa.

1

Creo que una solución para usted sería burlarse del valor que establece la prueba1.

Lo ideal es que las pruebas sean independientes, así que intente simular ese valor para poder ejecutar test2 siempre que lo desee; de ​​hecho, también debe simular (simular) valores sucios para que pueda ver cómo se comporta test2 si recibe datos inesperados .

1

Puede usar el complemento para pytest llamado pytest-dependency.

El código puede tener este aspecto:

import pytest 
import pytest_dependency 

@pytest.mark.dependency() #First test have to have mark too 
def test_function_one(): 
    assert 0, "Deliberate fail" 

@pytest.mark.dependency(depends=["test_function_one"]) 
def test_function_two(): 
    pass #but will be skipped because first function failed 
Cuestiones relacionadas