Tôi đang sử dụng phpunit và tôi phải kiểm tra kết quả
PHPUnit_Framework_Assert::assertObjectHasAttribute[] must be a valid attribute name
37. Tôi có một đối tượng chứa thuộc tính số nguyên như bạn có thể thấy trong chế độ xem trình gỡ lỗi:Khi tôi làm điều này:
$this->assertObjectHasAttribute['1507',$object];
Tôi gặp lỗi:
PHPUnit_Framework_Assert::assertObjectHasAttribute[] must be a valid attribute name
PHPUnit_Framework_Assert::assertObjectHasAttribute[] must be a valid attribute name
38 của tôi là một ví dụ của PHPUnit_Framework_Assert::assertObjectHasAttribute[] must be a valid attribute name
39Đã hỏi ngày 1 tháng 10 năm 2015 lúc 22:24Oct 1, 2015 at 22:24
Nicolas Therynicolas TheryNicolas Thery
2.1914 Huy hiệu vàng24 Huy hiệu bạc36 Huy hiệu đồng4 gold badges24 silver badges36 bronze badges
2
Một thuộc tính số là bất thường và phpunit sẽ không chấp nhận nó như một tên thuộc tính hợp lệ:
private static function isAttributeName[string $string] : bool
{
return preg_match['/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/', $string] === 1;
}
Do đó, điều tốt nhất cần làm là không kiểm tra nếu đối tượng có thuộc tính, mà là kiểm tra xem một mảng có khóa không.
PHPUnit_Framework_Assert::assertObjectHasAttribute[] must be a valid attribute name
37 trả về một đối tượng hoặc một mảng
PHPUnit_Framework_Assert::assertObjectHasAttribute[] must be a valid attribute name
Như được mô tả trong các tài liệu:
41PHPUnit_Framework_Assert::assertObjectHasAttribute[] must be a valid attribute name
...
PGS
- Khi đúng, các đối tượng được trả về sẽ được chuyển đổi thành các mảng kết hợp.
Do đó, một phương pháp kiểm tra thích hợp là:
function testSomething[] {
$jsonString = '...';
$array = json_decode[$jsonString, true];
$this->assertArrayHasKey['1507',$array];
}
Đã trả lời ngày 2 tháng 10 năm 2015 lúc 9:37Oct 2, 2015 at 9:37
AD7sixAD7sixAD7six
61K12 Huy hiệu vàng88 Huy hiệu bạc121 Huy hiệu đồng12 gold badges88 silver badges121 bronze badges
1
PHPUnit_Framework_Assert::assertObjectHasAttribute[] must be a valid attribute name
42 Kiểm tra xem đối tượng đã cho có thuộc tính của tên đã cho, không phải giá trị của nó. Vì vậy, trong trường hợp của bạn:$this->assertObjectHasAttribute['ID',$object];
Nếu bạn muốn kiểm tra giá trị của nó, bạn chỉ có thể sử dụng
PHPUnit_Framework_Assert::assertObjectHasAttribute[] must be a valid attribute name
43:value, you could just use PHPUnit_Framework_Assert::assertObjectHasAttribute[] must be a valid attribute name
43:$this->assertEquals[1509, $object->ID];
Đã trả lời ngày 1 tháng 10 năm 2015 lúc 22:31Oct 1, 2015 at 22:31
MureinikmureinikMureinik
285K51 Huy hiệu vàng291 Huy hiệu bạc330 Huy hiệu đồng51 gold badges291 silver badges330 bronze badges
3
Không nhìn thấy bất cứ điều gì tốt hơn, tôi sẽ chuyển đổi đối tượng thành một mảng bằng cách sử dụng
PHPUnit_Framework_Assert::assertObjectHasAttribute[] must be a valid attribute name
44 và sử dụng PHPUnit_Framework_Assert::assertObjectHasAttribute[] must be a valid attribute name
45 thay thế: thay vào đó: $table = json_decode[$this->request[ 'POST', [ 'DataTableServer', 'getTable' ], $myData]];
$firstElement = get_object_vars[$table->aaData[0]];
$this->assertArrayHasKey['1507',$firstElement];
$this->assertArrayNotHasKey['1509',$firstElement];
$this->assertArrayHasKey['1510',$firstElement];
$this->assertArrayHasKey['1511',$firstElement];
Đã trả lời ngày 2 tháng 10 năm 2015 lúc 9:28Oct 2, 2015 at 9:28
Nicolas Therynicolas TheryNicolas Thery
2.1914 Huy hiệu vàng24 Huy hiệu bạc36 Huy hiệu đồng4 gold badges24 silver badges36 bronze badges
Phụ lục này liệt kê các phương thức khẳng định khác nhau có sẵn.
Việc sử dụng tĩnh so với không tĩnh của các phương pháp khẳng định
Các xác nhận của PHPUNIT được thực hiện trong
PHPUnit_Framework_Assert::assertObjectHasAttribute[] must be a valid attribute name
46. PHPUnit_Framework_Assert::assertObjectHasAttribute[] must be a valid attribute name
47 kế thừa từ PHPUnit_Framework_Assert::assertObjectHasAttribute[] must be a valid attribute name
46.Các phương thức khẳng định được khai báo tĩnh và có thể được gọi từ bất kỳ ngữ cảnh nào bằng cách sử dụng
PHPUnit_Framework_Assert::assertObjectHasAttribute[] must be a valid attribute name
49, ví dụ, hoặc sử dụng PHPUnit_Framework_Assert::assertObjectHasAttribute[] must be a valid attribute name
50 hoặc PHPUnit_Framework_Assert::assertObjectHasAttribute[] must be a valid attribute name
51, trong một lớp mở rộng PHPUnit_Framework_Assert::assertObjectHasAttribute[] must be a valid attribute name
47. Bạn thậm chí có thể sử dụng các trình bao bọc chức năng toàn cầu như PHPUnit_Framework_Assert::assertObjectHasAttribute[] must be a valid attribute name
53.Một câu hỏi phổ biến, đặc biệt là từ các nhà phát triển mới đến PHPUNIT, là việc sử dụng
PHPUnit_Framework_Assert::assertObjectHasAttribute[] must be a valid attribute name
50 hay PHPUnit_Framework_Assert::assertObjectHasAttribute[] must be a valid attribute name
51, chẳng hạn, là cách đúng cách để gọi một sự khẳng định. Câu trả lời ngắn gọn là: Không có cách đúng. Và cũng không có cách nào sai. Đó là một vấn đề sở thích cá nhân.Đối với hầu hết mọi người, nó chỉ cảm thấy đúng khi sử dụng
PHPUnit_Framework_Assert::assertObjectHasAttribute[] must be a valid attribute name
50 vì phương pháp thử nghiệm được gọi trên một đối tượng thử nghiệm. Thực tế là các phương thức khẳng định được khai báo tĩnh cho phép [Re] sử dụng chúng bên ngoài phạm vi của một đối tượng thử nghiệm. Cuối cùng, các trình bao bọc chức năng toàn cầu cho phép các nhà phát triển gõ các ký tự ít hơn [PHPUnit_Framework_Assert::assertObjectHasAttribute[] must be a valid attribute name
53 thay vì PHPUnit_Framework_Assert::assertObjectHasAttribute[] must be a valid attribute name
50 hoặc PHPUnit_Framework_Assert::assertObjectHasAttribute[] must be a valid attribute name
51].AssertArrayhaskey []
PHPUnit_Framework_Assert::assertObjectHasAttribute[] must be a valid attribute name
60Báo cáo một lỗi được xác định bởi
PHPUnit_Framework_Assert::assertObjectHasAttribute[] must be a valid attribute name
61 nếu PHPUnit_Framework_Assert::assertObjectHasAttribute[] must be a valid attribute name
62 không có PHPUnit_Framework_Assert::assertObjectHasAttribute[] must be a valid attribute name
63.PHPUnit_Framework_Assert::assertObjectHasAttribute[] must be a valid attribute name
64 là nghịch đảo của khẳng định này và có cùng một đối số.Ví dụ 1.1 Sử dụng AssertArrayhasKey [] ¶Usage of assertArrayHasKey[]¶