2016-09-05 3 views
1

Ich habe eine Funktion, die ein Array von Array von Datensätzen nach der Verarbeitung zurückgibt. Der erwartete Rückgabewert sieht ungefähr so ​​aus -phpunit alles Matcher innerhalb Array

[ 
    [....] 
    ['Name', 'Quantity', 'Tags', 'Price', 'Total', 'Autogenerated Value'] 
    [....] 
    [....] 
] 

das Feld Autogenerate Value kann alles dynamisch generiert werden.

Derzeit versuche ich assertEquals Methoden zu verwenden, aber jedes Mal wird der Wert automatisch generiert werden unterschiedlich sein. Ist das da Matcher sowas wie anything() das kann ich hier benutzen.

Ich will nicht wirklich meine eigene Assertionsfunktion Iterieren über dem erwarteten Wert schreiben und behaupten mit assertArraySubset

Antwort

0

Diese noch nicht möglich ist, aber man konnte PHPUnit erweitern Einschränkungen innerhalb Arrays zu bewerten:

  • schreiben Sie eine benutzerdefinierte Comparator Implementierung wie diese die compar

    class ConstraintComparator extends SebastianBergmann\Comparator 
    { 
        public function accepts($expected, $actual) 
        { 
         return $expected instanceof \PHPUnit_Framework_Constraint; 
        } 
        public function assertEquals($expected, $actual, $delta = 0.0, $canonicalize = false, $ignoreCase = false) 
        { 
         $expected->evaluate($actual); 
        } 
    
  • hinzufügen ator in der Bootstrap-Datei mit:

    SebastianBergmann\Comparator\Factory::getInstance()->register(new ConstraintComparator); 
    

Jetzt PHPUnit sollte Einschränkungen auswerten, statt sie zu vergleichen, wo immer sie auftreten.

0

Ich will nicht wirklich meine eigene Assertionsfunktion Iterieren über dem erwarteten Wert schreiben und behaupten mit assertArraySubset

Aber warum nicht?

Wenn Sie nicht viele Assertionen in Ihren Protokollen möchten, können Sie Ihre Assertion-Methode auf PHPUnit_Framework_ExpectationFailedException beschränken, falls etwas schief geht (dh wenn der konstante Teil des Arrays fehlt oder das letzte, dynamisch generierte Element hat nicht den erwarteten Wert) mit dem Inhalt des genauen Problemelements.