2012-05-05 6 views
7

Lassen Sie uns sagen, dass ich diese Testfunktionen haben:Wie kann ich einen Test überspringen, wenn ein anderer Test mit py.test fehlschlägt?

def test_function_one(): 
    assert # etc... 

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

Wie kann ich sicherstellen, dass test_function_two nur dann läuft, wenn test_function_one geht (ich hoffe, dass es möglich ist)?

Bearbeiten: Ich brauche dies, weil Test zwei die Eigenschaft verwendet, die Test überprüft.

+1

Können Sie erklären, warum Sie diese brauchen? Stellt der erste Test etwas her, das der zweite nutzt? Das ist generell schlecht. – loganfsmyth

+1

Dies ist normalerweise ein Zeichen für einen spröden Test, ein Test, der von mehr Dingen abhängt als von der Einheit, die er testet. Sind Sie sicher, dass Sie das tun müssen? Es wäre (wahrscheinlich) besser, den zu testenden Test und/oder Code umzuformen, um diese Abhängigkeit zu vermeiden. –

+0

@loganfsmyth Nein der erste Test ist nichts einzurichten, aber der zweite Test * verwendet * die Eigenschaft, die der erste Test überprüft. –

Antwort

0

Ich denke, das ist das, was Sie wollen:

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

Diese Ihre Anforderung erfüllt, dass die zweite "test" (Assertion) läuft nur, wenn der erste "Test" (Assertion) passiert.

1

Ich denke, dass eine Lösung für yout wäre, den Wert zu verspotten, den der test1 setzt.

Idealerweise sollten Tests unabhängig sein, versuchen Sie also, diesen Wert nachzuahmen, damit Sie test2 immer ausführen können, wann immer Sie wollen. In der Tat sollten Sie auch falsche Werte simulieren, damit Sie sehen können, wie sich test2 verhält, wenn es unerwartete Daten empfängt .

1

Sie können Plugin für Pytest namens pytest-dependency verwenden.

Der Code kann wie folgt aussehen:

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 
Verwandte Themen