Tại sao, lỗi nghiêm trọng: Không tìm thấy 'PHPUnit_Framework_TestCase' trong lớp?


127

Tại sao tôi gặp lỗi PHP này?

Fatal error: Class 'PHPUnit_Framework_TestCase' not found in ...

9
Bạn không cung cấp bất kỳ thông tin nào cả.
Pekka

Chạy thử nghiệm của bạn thông qua dòng lệnh phpunit. Nó tải lên các lớp cần thiết.
Halfstop

Bạn cũng có thể sử dụng câu trả lời từ câu trả lời stackoverflow.com/questions/42811164/ trên để giữ mã của bạn tương thích với PHPUnit 6 cũng như các phiên bản trước đó.
Robson

Câu trả lời:


73

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!


14
PHPUnit 3.5 đi kèm với trình tải tự động của riêng nó có thể giúp mọi thứ đơn giản: require_once 'PHPUnit/Autoload.php'

1
Tôi đồng tình rằng request_once ('PHPUnit / Autoload.php') là cách thực hành tốt nhất.
Paul Maidment

1
Tôi không có cả hai PHPUnit/Autoload.phpPHPUnit/Framework/TestCase.php, thư mục của tôi giống nhưPHPUnit/Framework/MockObject
Sufendy

4
và bây giờ tôi có PHP Fatal error: require_once(): Failed opening required 'PHPUnit/Autoload.php'
Dennis

1
xem câu trả lời của @ shadi cho PHP 6+ stackoverflow.com/a/42561590/2883328
Dennis

237

Đố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


4
Cảm ơn, tôi gặp vấn đề này do Travis CI sử dụng phiên bản PHPUnit gần đây nhất trên các bản dựng PHP 7 của họ. Cách khắc phục của tôi là tự tải xuống một phar cũ và sử dụng nó thay thế.
DisgruntledGoat

2
github.com/sebastianbergmann/phastait/wiki/ trên đó là trên cùng của ghi chú phát hành, nhưng tôi đã bỏ lỡ nó
Qchmqs 15/03/2017

Xin cảm ơn các bạn, thưa ngài. Tôi thực sự đến đây sau khi nâng cấp lên phiên bản 6.
h4ckNinja

Tôi đã thực sự khó chịu khi các bài kiểm tra của tôi đột nhiên ngừng hoạt động. Tôi đã thực hiện cập nhật trình soạn thảo và nó đã cập nhật PHPunit của tôi lên 6.1. Cảm ơn bạn.
Jed Lynch

38

Đố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 {

}

Tuyệt vời điều này làm việc cho tôi khi tôi đang theo một hướng dẫn cũ

bạn vừa sao chép câu trả lời của shadi
Adam

@Adam ai là shadi?
Jijesh Cherrai

Tôi không biết một điều như vậy. Tôi đã gặp lỗi tương tự sau đó tôi khám phá câu trả lời bằng cách bẻ khóa gói
Jijesh Cherrai

13

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 .


1
Có, nếu bạn đã làm điều này: 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.8và bao gồm phpunittrong 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"
Xavi Montero

12

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.


1
giải pháp này quan trọng nếu bạn muốn không chạm vào mã Civi \ Test nhưng cần tương thích với thử nghiệm đơn vị php dựa trên không gian tên mới nhất
Shahadat Hossain Khan

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. demolà 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

3
Điều này không còn hoạt động vì PHPUnit mới nhất không còn hỗ trợ các tên lớp cũ như PHPUnit_Framework_TestCase. Bạn thực sự phải sử dụng... extends PHPUnit\Framework\TestCase
Mikko Rantalainen

Chỉ cần nói rằng tôi đã phải đầu tiên mv phpunit /usr/local/bin/phpunitvà 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.
George Mylonas

4

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.


1

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'


0

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)


0

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.

  1. Tải xuống bản vá "Unified Diff" từ cuối https://core.trac.wordpress.org/changeset/40547
  2. 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
  3. 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

  4. 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.


0

THÔNG BÁO: Lệnh php bin/console generate:doctrine:crudcũng tạo TestControllertrong 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ó!


0

Đối với tôi, đó là vì tôi đã chạy

$ phpunit .

thay vì

$ phpunit

khi tôi đã có một phpunit.xmltập tin cấu hình trong thư mục làm việc.


0

Tôi đang sử dụng php 5.6 trên cửa sổ 10 với phiên bản zend 1.12 để tôi thêm

request_once 'PHPUnit / Autoload.php';

trước

lớp trừu tượng Zend_Test_PHPUnit_ControllTestCase mở rộng PHPUnit_Framework_TestCase

đã làm việc. Chúng ta cần thêm câu lệnh trên trong tệp ControllerTestCase.php

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.