Tại sao tôi gặp lỗi PHP này?
Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...
Tại sao tôi gặp lỗi PHP này?
Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...
Câu trả lời:
Các tài liệu PHPUnit nói thường nói để bao gồm / yêu cầu PHPUnit / Framework.php, như sau:
require_once ('PHPUnit/Framework/TestCase.php');
CẬP NHẬT
Kể từ PHPUnit 3.5, có một lớp trình tải tự động tích hợp sẵn sẽ xử lý việc này cho bạn:
require_once 'PHPUnit/Autoload.php';
Cảm ơn Phoenix đã chỉ ra điều này!
require_once 'PHPUnit/Autoload.php'
PHPUnit/Autoload.php
và PHPUnit/Framework/TestCase.php
, thư mục của tôi giống nhưPHPUnit/Framework/MockObject
PHP Fatal error: require_once(): Failed opening required 'PHPUnit/Autoload.php'
Đối với những người đến đây sau khi cập nhật phpunit lên phiên bản 6 hoặc cao hơn được phát hành vào 2017/02/03 (ví dụ: với nhà soạn nhạc), bạn có thể gặp lỗi này vì mã phpunit hiện được đặt tên (kiểm tra thay đổi ).
Bạn sẽ cần phải cấu trúc lại những thứ như \PHPUnit_Framework_TestCase
để\PHPUnit\Framework\TestCase
Đối với phiên bản phpunit cao hơn, chẳng hạn như 6.4 Bạn phải sử dụng không gian tên PHPUnit \ Framework \ TestCase
sử dụng TestCase thay vì PHPUnit_Framework_TestCase
// use the following namespace
use PHPUnit\Framework\TestCase;
// extend using TestCase instead PHPUnit_Framework_TestCase
class SampleTest extends TestCase {
}
Bạn có thể gặp lỗi này vì bạn đã đặt tên cho tệp. Nếu vậy, bạn sẽ cần xác định rằng PHPUnit_Framework_TestCase nằm trong không gian tên toàn cầu bằng cách đặt trước dấu gạch chéo ngược:
namespace AcmeInc\MyApplication\Tests
class StackTest extends \PHPUnit_Framework_TestCase {}
Tôi đã gửi một PR thô để bắt đầu cuộc trò chuyện để sửa tài liệu .
class YourNiceTest extends PHPUnit_Framework_TestCase
chỉ cần thêm \ vào trước lớp mở rộng, như trong class YourNiceTest extends \PHPUnit_Framework_TestCase
- Điều này hiệu quả với tôi, sử dụng Symfony 2.8
và bao gồm phpunit
trong tệp soạn thảo được tải xuống dưới dạng phụ thuộc cục bộ với"phpunit/phpunit": "^4.8"
Tôi đã chạy các bài kiểm tra PHPUnit trên PHP5 và sau đó, tôi cũng cần hỗ trợ PHP7. Đây là những gì tôi đã làm:
Trong composer.json:
"phpunit/phpunit": "~4.8|~5.7"
Trong tệp bootstrap PHPUnit của tôi (trong trường hợp của tôi, /tests/bootstrap.php
):
// PHPUnit 6 introduced a breaking change that
// removed PHPUnit_Framework_TestCase as a base class,
// and replaced it with \PHPUnit\Framework\TestCase
if (!class_exists('\PHPUnit_Framework_TestCase') && class_exists('\PHPUnit\Framework\TestCase'))
class_alias('\PHPUnit\Framework\TestCase', '\PHPUnit_Framework_TestCase');
Nói cách khác, điều này sẽ hoạt động cho các bài kiểm tra được viết ban đầu cho PHPUnit 4 hoặc 5, nhưng sau đó cũng cần để làm việc trên PHPUnit 6.
Bạn chỉ có thể cài đặt PHPUnit để chạy các lệnh ( https://github.com/sebastianbergmann/phastait/#php-archive-phar ):
wget https://phar.phpunit.de/phpunit.phar
chmod +x phpunit.phar
mv phpunit.phar /usr/local/bin/phpunit
Chạy thử nghiệm đơn
Và sau đó chạy thử nghiệm PHPunit:
phpunit test.php
Nội dung của tệp thử nghiệm như sau:
<?php
class StackTest extends PHPUnit_Framework_TestCase
{
protected function setUp()
{
}
public function testSave()
{
}
}
Chạy bộ kiểm tra
Cấu hình của bộ kiểm tra: demosuite.xml. demo
là thư mục chứa tất cả các bài kiểm tra. Các tệp kiểm tra phải được đặt tên là *_test.php
( suffix
).
<testsuites>
<testsuite name="DemoTestSuite">
<directory suffix="test.php">demo</directory>
</testsuite>
</testsuites>
Bộ kiểm tra chạy với các lệnh sau:
phpunit -c demosuite.xml --testsuite DemoTestSuite
PHPUnit_Framework_TestCase
. Bạn thực sự phải sử dụng... extends PHPUnit\Framework\TestCase
mv phpunit /usr/local/bin/phpunit
và sau đó sudo chmod +x /usr/local/bin/phpunit
. Đặt tệp là tệp thực thi trước khi di chuyển, nó không bao giờ hoạt động trên Vagrant Ubuntu. Không biết tại sao ... Nhưng trong trường hợp ai đó đang vật lộn với điều này, tôi hy vọng điều này sẽ giúp ích.
Giả thiết:
Phastait (3.7) có sẵn trong môi trường giao diện điều khiển.
Hoạt động:
Nhập lệnh sau trong bàn điều khiển:
SHELL> phpunit "{{PATH TO THE FILE}}"
Bình luận:
Bạn không cần bao gồm bất cứ điều gì trong các phiên bản mới của PHPUnit trừ khi bạn không muốn chạy trong bảng điều khiển. Ví dụ, chạy thử nghiệm trong trình duyệt.
Tôi sử dụng ZF2 và làm việc cho tôi khi được thay thế 'PHPUnit_Framework_TestCase' thành '\ PHPUnit \ Framework \ TestCase'
Nếu bạn có Centos hoặc bản phân phối Linux khác, bạn phải cài đặt gói phpunit, tôi đã làm điều đó với yum cài đặt phpunit và nó đã hoạt động. Có lẽ bạn có thể phải thêm một kho lưu trữ, nhưng tôi nghĩ nó phải hoạt động trơn tru với những kho mặc định (tôi có CentOS 7)
Có thể là bạn đang chạy các bài kiểm tra cốt lõi của WordPress và gần đây đã nâng cấp PhpUnit của bạn lên phiên bản 6. Nếu đúng như vậy, thì sự thay đổi gần đây về cách đặt tên trong PhpUnit sẽ phá vỡ mã của bạn.
May mắn thay, có một bản vá cho các bài kiểm tra cốt lõi tại https://core.trac.wordpress.org/changeset/40547 sẽ giải quyết vấn đề này. Nó cũng bao gồm các thay đổi đối với travis.yml, mà bạn có thể không có trong thiết lập của mình; nếu đó là trường hợp thì bạn sẽ cần phải chỉnh sửa tệp .diff để bỏ qua bản vá Travis.
Chỉnh sửa tệp vá để xóa phần Travis của bản vá nếu bạn không cần. Xóa từ đầu tệp đến ngay phía trên dòng này:
Index: /branches/4.7/tests/phpunit/includes/bootstrap.php
Lưu khác biệt trong thư mục phía trên thư mục / gồm / của bạn - trong trường hợp của tôi đây là thư mục Wordpress
Sử dụng công cụ vá Unix để vá các tệp. Bạn cũng cần phải loại bỏ một vài dấu gạch chéo đầu tiên để chuyển từ cấu trúc thư mục tuyệt đối sang cấu trúc thư mục tương đối. Như bạn có thể thấy từ điểm 3 ở trên, có năm dấu gạch chéo trước thư mục bao gồm, cờ -p5 sẽ loại bỏ cho bạn.
$ cd [WORDPRESS DIRECTORY]
$ patch -p5 < changeset_40547.diff
Sau khi tôi làm điều này, các bài kiểm tra của tôi chạy lại một lần nữa.
THÔNG BÁO: Lệnh php bin/console generate:doctrine:crud
cũng tạo TestController
trong src/Tests
để nó có thể gây ra lỗi khi bạn cố khởi động máy chủ nếu bạn không có UnitTests
. Loại bỏ các tập tin sửa chữa nó!
Đối với tôi, đó là vì tôi đã chạy
$ phpunit .
thay vì
$ phpunit
khi tôi đã có một phpunit.xml
tập tin cấu hình trong thư mục làm việc.