2013-05-30 61 views
37

Tôi cần kiểm tra xem biến có phải là đối tượng thuộc loại Người dùng hay không. User is lớp học của tôi $user đối tượng của tôiPHPUnit: assertInstanceOf() không hoạt động

$this->assertInstanceOf($user,User); 

này không làm việc, tôi có một sử dụng không xác định tài khoản liên tục - giả 'Người dùng'

Cảm ơn trước sự giúp đỡ của bạn

Trả lời

5

Hoặc Bạn có thể sử dụng một cái gì đó như:

$this->assertInstanceOf(get_class($expectedObject), $user); 

Tôi thường sử dụng này khi tôi đang kiểm tra Ví dụ: nếu phương pháp setter đang trở lại tham chiếu đến bản thân.

$testedObj = new ObjectToTest(); 
$this->assertInstanceOf(
    get_class($testedObj), 
    $testedObj->setSomething('someValue'), 
    'Setter is not returning $this reference' 
); 
+1

Sử dụng PHP 5.6, bạn có thể sử dụng phương thức tĩnh ':: class', như sau: ' $ this-> assertInstanceOf (ObjectToTest :: class, $ testedObj-> setSomething ('someValue') ' – marcegarba

+2

Trên thực tế,' SomeClass :: class' tính năng đã được thêm vào trong [PHP 5.5] (http://php.net/manual/en/migration55.new-features.php#migration55.new-features.class-name) – james2doyle

+0

Vâng, tất nhiên, nhưng Đây không phải là vấn đề tôi đoán Các dịch vụ sử dụng phiên bản php 5.4 và thấp hơn dưới 10% tổng số php sử dụng (theo thống kê của nhà soạn nhạc) https://seld.be/notes/php-versions-stats-2016-1-edition –

6

Bạn nên sử dụng ::class bất cứ nơi nào bạn có thể. Nếu bạn quen với tiêu chuẩn này, bạn không phải sử dụng FQCN (tên đầy đủ), hoặc thoát khỏi các dấu gạch chéo ngược. Ngoài ra, IDE cung cấp chức năng tốt hơn nếu họ biết rằng User ở đây không chỉ là một chuỗi, mà là một lớp.

$this->assertInstanceOf(User::class, $user);