2011-11-20 19 views
6

testowane z PHPUnit:assertEquals i assertTrue dać różne wyniki dla tych samych zmiennych

$xml_1 = new SimpleXMLElement('<name>Bugs</name>'); 
$xml_2 = new SimpleXMLElement('<name>Bugs</name>'); 

$this->assertEquals($xml_1, $xml_2); // Passes 
$this->assertTrue($xml_1==$xml_2);  // Fails 

Um, co?

EDYCJA: Nie, to nie jest głupie pytanie. W języku Python:

import unittest 
class TestEqualityIdentity(unittest.TestCase): 
def test_equality(self): 
    x = 1 
    y = 1 
    self.assertTrue(x==y)  # Passes 
    self.assertEqual(x, y)  # Passes 
if __name__ == '__main__': 
    unittest.main() 

Nie ma powodu, aby PHP zachowywało się jak w języku Python. Ale to nie jest głupie pytanie w PHP.

$x = 1; 
$y = 1; 
$this->assertEquals($x, $y);  // Passes 
$this->assertTrue($x==$y);   // Passes 

EDIT 2 Raymonda odpowiedź poniżej ma rację, nic nie szkodzi, że w tym piśmie, że to 3 głosów w dół.

FWIW, potrzebowałem porównania testowego wartości tekstowych dwóch obiektów XML i dostałem je, przesyłając je do ciągów.

$this->assertTrue((string) $xml_1== (string) $xml_2); // Passes, works in if test 

// Note that simply referring to a SimpleXMLElement _seems_ to give its 
// text node. 

$this->assertEquals($xml_1, 'Bugs'); // Passes 

// This seemed weird to me when I first saw it, and I can't 
// say I like it any better now 
+0

Zgaduję, że == testuje wskaźnik równości, a assertEquals szuka równości wartości. Ale nie wiem wystarczająco dużo, aby wiedzieć na pewno. Google powinno być w stanie Ci pomóc tutaj –

+0

Aurelio, dzięki za pomocną edycję tytułu. – chernevik

+1

@chernevik Nie ma za co. Poza tym ... +1 - to nie jest głupie pytanie. –

Odpowiedz

4

+1 To jest świetne pytanie.

musiałem szukać w docs PHP za odpowiedzi: http://www.phpunit.de/manual/3.4/en/api.html

Równość nie jest zdefiniowane dla obiektów XML Element, więc $this->assertTrue($xml_1==$xml_2); tylko odnieść sukces, jeśli dwa obiekty mają taką samą tożsamość (to ten sam obiekt).

W przeciwieństwie do tego, assertEquals stara się być inteligentna i ma specjalne traktowanie w zależności od typu obiektu. W przypadku XML porównuje strukturę i zawartość elementów XML, zwracając True, jeśli mają one takie samo semantyczne znaczenie, mimo że są odrębnymi obiektami.

+0

Thx. Miło wiedzieć, że to nie tylko ja. – chernevik

Powiązane problemy