Hướng dẫn phpunit assert object has property - đối tượng khẳng định phpunit có thuộc tính

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

Như được mô tả trong các tài liệu:

PHPUnit_Framework_Assert::assertObjectHasAttribute[] must be a valid attribute name
41

...

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
60

Bá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[]

Bài Viết Liên Quan

Chủ Đề