Kann ich @depends verwenden, um von einem Test mit einem @dataProvider abhängig zu sein?

9

Ich habe eine Testklasse, in der ein Test mehrere Male über ein @dataProvider und ein anderer Test mit @depends auf der ersten Methode läuft. Wenn ich jedoch var_dump anwähle, was an den zweiten Test übergeben werden soll, gibt es mir ein solides NULL , was ich nicht erwartet habe.

Mit anderen Worten: Was soll das tun?

%Vor%     
Zsub 22.05.2012, 18:03
quelle

3 Antworten

5

Normalerweise wird @dataProvider verwendet, wenn Sie einen Test mehrere Male mit verschiedenen Datensätzen für jeden Test ausführen möchten. Es existiert, um Sie daran zu hindern, im Test Looping-Code zu schreiben und um zu ermöglichen, dass verschiedene Datensätze einzeln übergeben oder fehlschlagen.

Wie ich in meinen Kommentaren gesagt habe, glaube ich, dass PHPUnit entweder @depends oder @dataProvider verwenden wird, und aus Ihrem Beispiel geht hervor, dass die zweite gewinnt. Eine andere Möglichkeit ist, dass Tests mit Datenprovidern nicht als Abhängigkeiten verwendet werden können, da PHPUnit nicht weiß, welchen Test-plus-Datensatz er auswählen soll.

Da registerDataProvider einen einzelnen Datensatz zurückgibt, können Sie ihn genauso einfach aus dem Test selbst aufrufen. Dies würde es @depends ermöglichen, im zweiten Test ohne @dataProvider zu arbeiten. Angenommen, testRegister muss $device und / oder $supposedResult ändern, sollte dies funktionieren:

%Vor%

Wenn diese Variablen beim ersten Test nicht geändert werden müssen, können Sie einfach registerDataProvider aus beiden Tests aufrufen. Beachten Sie, dass PHPUnit ein zurückgegebenes Array nicht von einem abhängigen Test in Argumente für den abhängigen Test trennt, wie dies der Datenprovidermechanismus tut. Dies liegt daran, dass es nicht weiß, dass das zurückgegebene Array mehrere Argumente gegenüber einem einzelnen Argument aufweist.

    
David Harkness 23.05.2012, 15:51
quelle
9

In der aktuellen Version von PHPUnit (5.4 ab heute) ist es möglich.

Laut Dokumentation :

  

Wenn ein Test sowohl von einer @dataProvider-Methode als auch von einem oder mehreren Tests empfangen wird, für die er @ abhängt, werden die Argumente des Datenproviders vor denen aus den abhängigen Tests stehen. Die Argumente von Tests, die von den Tests abhängig sind, sind für jeden Datensatz gleich.

So würde es praktisch aussehen:

%Vor%     
Majiy 28.06.2016 13:01
quelle
-1

Ich habe festgestellt, dass das nicht möglich ist. Durch geringfügige Anpassung der Testklasse habe ich jedoch im Grunde das gleiche Ergebnis erzielt, allerdings scheint die abhängige Beziehung darin verloren zu gehen, dass, wenn der erste Test fehlschlägt, die zweite glücklich läuft:

%Vor%     
Zsub 22.05.2012 19:15
quelle

Tags und Links