2011-11-20 44 views
6

Như thử nghiệm với phpunit:assertEquals và assertTrue cho kết quả khác nhau cho cùng một biến

$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, những gì?

EDIT: Không, đây không phải là một câu hỏi ngu ngốc. Trong 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() 

Không có lý do gì PHP cần hành xử như Python. Nhưng, nó cũng không phải là một câu hỏi ngu ngốc trong PHP.

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

EDIT 2 Câu trả lời của Raymond bên dưới là đúng, không bao giờ nhớ rằng bài viết này có 3 phiếu bầu.

FWIW, tôi cần một so sánh kiểm tra của giá trị nút văn bản của hai đối tượng XML và nhận nó bằng cách truyền chúng thành chuỗi.

$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

Tôi đoán rằng == kiểm tra tính bình đẳng của con trỏ và xác nhậnBạn tìm kiếm giá trị bình đẳng. Nhưng tôi không biết đủ để biết chắc chắn. Google sẽ có thể giúp bạn ở đây –

+0

Aurelio, cảm ơn bạn đã chỉnh sửa hữu ích trên tiêu đề. – chernevik

+1

@chernevik Bạn được chào đón. Bên cạnh đó ... 1 - đây không phải là một câu hỏi ngu ngốc. –

Trả lời

4

+1 Đây là một câu hỏi hay.

tôi phải tìm trong các tài liệu PHP cho câu trả lời: http://www.phpunit.de/manual/3.4/en/api.html

Bình đẳng không được định nghĩa cho các đối tượng XML Element, vì vậy các $this->assertTrue($xml_1==$xml_2); sẽ chỉ thành công nếu hai đối tượng có bản sắc cùng (là cùng một đối tượng).

Ngược lại, assertEquals cố gắng thông minh và có xử lý trường hợp đặc biệt tùy thuộc vào loại đối tượng. Trong trường hợp của XML, nó so sánh cấu trúc và nội dung của các phần tử XML, trả về True nếu chúng có cùng ý nghĩa ngữ nghĩa dù chúng là các đối tượng riêng biệt.

+0

Thx. Rất vui được biết đó không chỉ là tôi. – chernevik

Các vấn đề liên quan