Khi tôi viết các mô-đun của mình, tôi đang cố gắng cung cấp cho họ các bài kiểm tra đơn vị cho các phần quan trọng nhất của ứng dụng. Tuy nhiên, hiện tại có một số cách (Magento 2.1.3) về cách viết bài kiểm tra đơn vị:
Những cách kiểm tra khác nhau
- Tích hợp nó với
bin/magento dev:tests:run unit
và chạy nó trên đầu cài đặt phpunit mặc định đi kèm với Magento. - Viết chúng riêng biệt, chạy chúng với
vendor/bin/phpunit app/code/Vendor/Module/Test/Unit
và chế nhạo mọi thứ là Magento. - Viết chúng một cách riêng biệt, mô phỏng mọi thứ và sử dụng phiên bản toàn cầu của hệ thống PHPUnit.
- Viết chúng riêng biệt, chạy chúng với
vendor/bin/phpunit
, nhưng vẫn sử dụng\Magento\Framework\TestFramework\Unit\Helper\ObjectManager
.
Magento 2 và PHPUnit
Bên cạnh đó, Magento 2 đi kèm với PHPUnit 4.1.0, không tương thích với PHP7. Kiểu bản địa gợi ý kiểu (như string
và `int) và khai báo kiểu trả về trong chữ ký của bạn sẽ đưa ra lỗi. Ví dụ: một giao diện / lớp có chữ ký phương thức như thế này:
public function foo(string $bar) : bool;
... sẽ không thể bị chế giễu bởi PHPUnit 4.1.0. :-(
Tình hình hiện tại của tôi
Chính vì điều này mà giờ đây tôi chủ yếu viết các bài kiểm tra đơn vị của mình theo cách thứ ba (bằng cách gọi một phiên bản PHPUnit toàn hệ thống).
Trong thiết lập của tôi, tôi đã cài đặt PHPUnit 5.6 trên toàn cầu, vì vậy tôi có thể giải quyết việc viết mã PHP7 phù hợp, nhưng tôi phải thực hiện một số điều chỉnh. Ví dụ:
phpunit.xml
phải trông như thế này để tôi có thể sử dụng trình tải tự động của nhà soạn nhạc:
<?xml version="1.0"?>
<phpunit bootstrap="../../../../../../vendor/autoload.php"
colors="true">
<testsuites>
<testsuite name="Testsuite">
<directory>.</directory>
</testsuite>
</testsuites>
</phpunit>
... Và trong tất cả các phương pháp của tôi setUp()
, tôi có kiểm tra sau để tôi có thể viết các bài kiểm tra của mình với khả năng tương thích về phía trước:
// Only allow PHPUnit 5.x:
if (version_compare(\PHPUnit_Runner_Version::id(), '5', '<')) {
$this->markTestSkipped();
}
Theo cách này, khi các bài kiểm tra của tôi được chạy bởi PHPUnit tích hợp của Magentos, nó không gây ra lỗi.
Câu hỏi của tôi
Vì vậy, đây là câu hỏi của tôi: đây có phải là cách viết bài kiểm tra đơn vị 'lành mạnh' không? Bởi vì có vẻ không đúng với tôi khi Magento đi kèm với cả đống công cụ để hỗ trợ kiểm tra và tôi không thể sử dụng chúng vì tôi đang sử dụng PHP7. Tôi biết có vé trên GitHub giải quyết vấn đề này, nhưng tôi tự hỏi làm thế nào cộng đồng hiện đang viết bài kiểm tra.
Có cách nào để viết bài kiểm tra đơn vị trong Magento 2 để tôi không phải 'hạ cấp' mã của mình và vẫn có thể sử dụng trình trợ giúp tích hợp của Magentos để chế nhạo mọi thứ mà trình quản lý đối tượng chạm vào không? Hoặc thậm chí là thực hành xấu khi sử dụng trình quản lý đối tượng ngay cả trong các bài kiểm tra đơn vị của bạn?
Tôi đang thiếu rất nhiều hướng dẫn / ví dụ về cách thức phù hợp để kiểm tra các mô-đun tùy chỉnh của riêng bạn.