PHPUnit Assert True Eins (1)

8

Ich schaue PHPUnit an und das folgende hat mich gewundert. Behandelt oder behandelt PHPUnit nicht int. 1 und 0 als Boolean? Bei meinen aktuellen Tests nicht.

Beispiel: $this->assertTrue(preg_match('/asdf/', 'asdf'));

Bei meinen Tests schlägt dies fehl, da preg_match () int 1 oder 0 zurückgibt und nur bool false, wenn ein Fehler vorliegt.

Ich nehme die folgenden Arbeiten natürlich, da Vergleiche immer bool zurückgeben. $this->assertTrue(preg_match('/asdf/', 'asdf') === 1);

Fehle ich etwas in meinem preg_match, oder meine Behauptung, es zu machen .... weniger streng?

BEARBEITEN: Erfordert assertTrue übereinstimmende Typen? Gibt es eine Möglichkeit, die Behauptung weniger streng zu machen?

    
alairock 05.09.2013, 20:51
quelle

2 Antworten

17

PHP hat einen separaten boolean -Typ, seine Werte von TRUE und FALSE (Groß- und Kleinschreibung -unabhängige Konstanten) sind nicht identisch mit ganzzahligen Werten von 1 und 0.

Wenn Sie den strikten Vergleich verwenden ( === ), funktioniert es nicht: TRUE !== 1 und FALSE !== 0 .

Wenn Sie Typ-Jonglieren verwenden, wird TRUE in 1 konvertiert und FALSE in 0 konvertiert (und umgekehrt wird 0 in FALSE konvertiert, jede andere Ganzzahl wird in TRUE konvertiert). Also, TRUE == 1 und FALSE == 0 .

In PHPUnit sind assertTrue und assertFalse typabhängige, strenge Prüfungen. assertTrue($x) prüft ob TRUE === $x , es ist dasselbe wie assertSame(TRUE, $x) und nicht dasselbe wie assertEquals(TRUE, $x) .

In Ihrem Fall wäre ein möglicher Ansatz das explizite Typcasting:

%Vor%

PHPUnit verfügt jedoch über eine dedizierte Assertion, um die Zeichenkette gegen regulären Ausdruck zu prüfen:

%Vor%     
Denys Popov 05.09.2013, 21:57
quelle
3

Bitte verwenden Sie nicht eine Menge von assertTrue oder assertFalse prüft mit der realen Logik eingebettet in einem komplizierten Funktionsaufruf, wenn spezifischere Testfunktionen verfügbar sind.

PHPUnit verfügt über sehr viele Aussagen, die wirklich hilfreich sind, wenn sie nicht erfüllt werden. Sie geben Ihnen eine Menge Kontext, was schief gelaufen ist, was Ihnen beim Debuggen hilft.

Um nach einem regulären Ausdruck zu suchen, verwenden Sie assertRegExp() (siehe Ссылка )

    
Sven 05.09.2013 20:58
quelle

Tags und Links