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% 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:
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.
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%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%Tags und Links unit-testing php phpunit