Làm cách nào để nhận đối số từ nhà cung cấp dữ liệu trong PHPUnit?

Chúng tôi coi mã nguồn của mình là công dân hạng nhất. Điều đó có nghĩa là, trong số những thứ khác, chúng tôi tránh trùng lặp. Tại sao không làm điều tương tự với các bài kiểm tra của chúng tôi? . lặp đi lặp lại. Họ kiểm tra cùng một thứ chỉ với đầu vào hơi khác và sau đó là một xác nhận khác. đây có phải là cách cải thiện nó? . cảm ơn Nhà cung cấp dữ liệu PHPUnit

Di chuyển xuống dưới cùng của

./vendor/bin/phpunit --testdox

5 và thêm

./vendor/bin/phpunit --testdox

6. Bên trong,

./vendor/bin/phpunit --testdox

7 một mảng với

./vendor/bin/phpunit --testdox

8, sau đó là

./vendor/bin/phpunit --testdox

9'Medium'], và cuối cùng là

./vendor/bin/phpunit --testdox

0

dòng 1 - 7class DinosaurTest mở rộng TestCase{. dòng 10 - 31public function sizeDescriptionProvider[]{yield [10, 'Large'];yield [5, 'Medium'];yield [4, 'Small'];}}

Yield chỉ là một cách thú vị để trả về các mảng bằng cách sử dụng hàm Generator tích hợp sẵn của PHP. Như bạn sẽ thấy sau một phút nữa, những giá trị này - như

./vendor/bin/phpunit --testdox

0 và

./vendor/bin/phpunit --testdox

1 sẽ trở thành đối số cho thử nghiệm của chúng ta

Được rồi, trong phương thức thử nghiệm của chúng ta, hãy thêm một đối số

./vendor/bin/phpunit --testdox

2 và sau đó là

./vendor/bin/phpunit --testdox

3

dòng 1 - 7class DinosaurTest mở rộng TestCase{. dòng 10 - 27kiểm tra hàm công khaiDino10MeterOrGreaterIsLarge[int $length, string $expectedSize]. khoảng trống{. dòng 30 - 32}. dòng 34 - 40}

Bây giờ thay vì chiều dài của Big Eaty là

./vendor/bin/phpunit --testdox

0, hãy sử dụng

./vendor/bin/phpunit --testdox

5. Và đối với khẳng định của chúng tôi, hãy sử dụng

./vendor/bin/phpunit --testdox

6 thay vì

./vendor/bin/phpunit --testdox

7

dòng 1 - 7class DinosaurTest mở rộng TestCase{. dòng 10 - 27kiểm tra hàm công khaiDino10MeterOrGreaterIsLarge[int $length, string $expectedSize]. void{$dino = Khủng long mới[tên. 'Big Eaty', chiều dài. $chiều dài];. assertSame[$expectedSize, $dino->getSizeDescription[], 'Đây được cho là một con Khủng long lớn'];}. dòng 34 - 40}

Chúng tôi không cần các bài kiểm tra vừa và nhỏ nữa, vì vậy chúng tôi có thể loại bỏ cả hai

Vâng. Di chuyển trở lại thiết bị đầu cuối của bạn và chạy thử nghiệm của chúng tôi

./vendor/bin/phpunit --testdox

ồ ồ. Bài kiểm tra của chúng tôi không thành công vì. Nó nói rằng

ArgumentCountError - Có quá ít đối số được cung cấp. 0 đã qua và đúng 2 dự kiến

Rất tiếc, chúng tôi chưa bao giờ yêu cầu phương pháp thử nghiệm của mình sử dụng nhà cung cấp dữ liệu. Quay trở lại thử nghiệm của chúng tôi và thêm DocBlock với

./vendor/bin/phpunit --testdox

8

dòng 1 - 7class DinosaurTest mở rộng TestCase{. dòng 10 - 24 kiểm tra hàm công khaiDino10MeterOrGreaterIsLarge[int $length, string $expectedSize]. void{$dino = Khủng long mới[tên. 'Big Eaty', chiều dài. $chiều dài];. assertSame[$expectedSize, $dino->getSizeDescription[], 'Đây được cho là một con Khủng long lớn'];}. dòng 34 - 40}

Khi PHPUnit 10 được phát hành, chúng ta sẽ có thể sử dụng thuộc tính ưa thích

./vendor/bin/phpunit --testdox

9 thay vì chú thích này

Quay lại thiết bị đầu cuối. Chạy lại các bài kiểm tra

./vendor/bin/phpunit --testdox

Và. Đúng. Các bài kiểm tra của chúng tôi đang vượt qua

Ở đầu ra, chúng tôi thấy rằng mỗi thử nghiệm được chạy với bộ dữ liệu 0, 1 và 2. Đó là những mảng từ nhà cung cấp dữ liệu. Chúng ta có thể cải thiện điều này một chút. bởi vì nó sẽ không hữu ích lắm sau này nếu PHPUnit cho chúng tôi biết rằng tập dữ liệu

./vendor/bin/phpunit --testdox

0 không thành công. Đó là cái nào?

Quay trở lại bài kiểm tra của chúng tôi và, ở dưới đây sau câu lệnh đầu tiên

./vendor/bin/phpunit --testdox

7, hãy thêm mã thông báo

./vendor/bin/phpunit --testdox

2. Sao chép và dán cái này cho khủng long trung bình của chúng tôi với

./vendor/bin/phpunit --testdox

3 thay vì

./vendor/bin/phpunit --testdox

0 và cái này cần phải là

./vendor/bin/phpunit --testdox

5. Làm tương tự cho chú khủng long nhỏ của chúng ta với

./vendor/bin/phpunit --testdox

6 và

./vendor/bin/phpunit --testdox

7

dòng 1 - 7class DinosaurTest mở rộng TestCase{. dòng 10 - 34public function sizeDescriptionProvider[]{yield '10 Meter Large Dino' => [10, 'Large'];yield '5 Meter Medium Dino' => [5, 'Medium'];yield '4 Meter Small Dino'

Quay trở lại thiết bị đầu cuối của chúng tôi, hãy xem các bài kiểm tra của chúng tôi ngay bây giờ

./vendor/bin/phpunit --testdox

Và. đậu mát. Chúng tôi hiện có

Dino 10 mét trở lên là lớn với Dino Lớn 10 mét

Điều này có vẻ tốt hơn nhiều so với việc chỉ nhìn thấy tập dữ liệu 0. mặc dù chúng ta cần phải sửa một điều nữa. Tên phương thức thử nghiệm đó không còn ý nghĩa nữa. Thay đổi nó thành

./vendor/bin/phpunit --testdox

8

Và, nhìn vào khẳng định của chúng tôi, đối số tin nhắn không còn hữu ích nữa. vì vậy hãy loại bỏ nó

dòng 1 - 7class DinosaurTest mở rộng TestCase{. dòng 10 - 34public function sizeDescriptionProvider[]{yield '10 Meter Large Dino' => [10, 'Large'];yield '5 Meter Medium Dino' => [5, 'Medium'];yield '4 Meter Small Dino'

Cuối cùng, mặc dù không bắt buộc. Chúng ta có thể sử dụng

./vendor/bin/phpunit --testdox

9 hoặc

./vendor/bin/phpunit --testdox

0 làm kiểu trả về cho nhà cung cấp dữ liệu. Hãy chọn

./vendor/bin/phpunit --testdox

0- sau tất cả, một ngày nào đó chúng ta có thể cần những thứ đó cho hàng rào công viên

dòng 1 - 7class DinosaurTest mở rộng TestCase{. dòng 10 - 34public function sizeDescriptionProvider[]. \Máy phát điện{. dòng 37 - 39}}

Để đảm bảo điều này không làm hỏng bất kỳ thứ gì, hãy thử kiểm tra lại một lần nữa

./vendor/bin/phpunit --testdox

ừm. Thật tuyệt vời. Kiểm tra xanh ở mọi nơi

Và bạn đã có nó, với một chút TLC, các bài kiểm tra của chúng tôi hiện đã đẹp và gọn gàng. Tiếp theo, hãy tìm hiểu cách chúng ta có thể lấy trạng thái sức khỏe của Dino từ GitHub và sử dụng nó trong ứng dụng của mình

Chủ Đề