2012-05-05 33 views
7

Diciamo che ho queste funzioni di test:Come posso saltare un test se un altro test fallisce con py.test?

def test_function_one(): 
    assert # etc... 

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

Come posso fare in modo che test_function_two viene eseguito solo se test_function_one passa (spero che sia possibile)?

Modifica: Ho bisogno di questo perché il test due sta utilizzando la proprietà che verifica uno verifica.

+1

Può spiegare perché avete bisogno di questo? Il primo test sta configurando qualcosa che usa il secondo? Questo è generalmente cattivo. – loganfsmyth

+1

Questo è tipicamente un segno di un test fragile, un test che dipende da più cose rispetto all'unità testata, sei * sicuro * che devi fare questo? Sarebbe (probabilmente) preferibile rifattorizzare il test e/o il codice sotto test per evitare questa dipendenza. –

+0

@loganfsmyth No il primo test non sta configurando nulla, ma il secondo test * fa * usa la proprietà verificata dal primo test. –

risposta

0

penso che questo è ciò che si vuole:

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

Questa soddisfano le proprie esigenze che il secondo "test" (affermazione) viene eseguito solo se il primo "test" (affermazione) passa.

1

Penso che una soluzione per te sarebbe prendere in giro il valore impostato dal test1. Idealmente i test dovrebbero essere indipendenti, quindi prova a prendere in giro quel valore in modo da poter sempre eseguire test2 quando vuoi, infatti dovresti anche simulare (falsificare) i valori dirty in modo da poter vedere come si comporta test2 se riceve dati imprevisti .

1

È possibile utilizzare il plug-in per pytest chiamato pytest-dependency.

Il codice può apparire così:

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 
Problemi correlati