PHPUnit - 'Không có thử nghiệm nào được thực thi' khi sử dụng tệp cấu hình


89

Vấn đề

Để cải thiện chất lượng mã của mình, tôi đã quyết định cố gắng tìm hiểu cách kiểm tra mã của mình bằng Kiểm tra đơn vị thay vì các giải pháp kiểm tra tầm thường ở mức tốt nhất.

Tôi quyết định cài đặt PHPUnit bằng cách sử dụng trình tổng hợp cho một thư viện cá nhân cho phép tôi đạt được các chức năng cơ sở dữ liệu chung. Lúc đầu, tôi không có tệp cấu hình cho PHPUnit và khi tôi chạy các lệnh như:

$ phpunit tests/GeneralStringFunctions/GeneralStringFunctionsTest

Xin lưu ý rằng đây là lệnh đầu cuối, vì vậy tôi không bao gồm .phpphần mở rộng. GeneralStringFunctionsTest được đề cập ở trên thực sự là một GeneralStringFunctionsTest.phptệp.

Đầu ra là những gì tôi mong đợi:

Thời gian: 31 ms, Bộ nhớ: 2,75Mb

OK (1 kiểm tra, 1 khẳng định)

Sau đó, tôi đã cố gắng sử dụng tệp cấu hình để tự động tải bộ thử nghiệm thay vì phải nhập tệp theo cách thủ công mỗi lần. Tôi đã tạo một tệp có tên phpunit.xmltrong thư mục gốc của mình và nhập thông tin sau vào tệp: http://pastebin.com/0j0L4WBD :

<?xml version = "1.0" encoding="UTF-8" ?>
<phpunit>
    <testsuites>
        <testsuite name="Tests">
            <directory>tests</directory>
        </testsuite>
    </testsuites>
</phpunit>

Bây giờ, khi tôi chạy lệnh:

phpunit

Tôi nhận được kết quả sau:

PHPUnit 4.5.0 của Sebastian Bergmann và những người đóng góp.

Cấu hình đọc từ /Users/muyiwa/Projects/DatabaseHelper/phpunit.xml

Thời gian: 16 ms, Bộ nhớ: 1,50Mb

Không có thử nghiệm nào được thực hiện!

Trong trường hợp đó là hữu ích, cấu trúc thư mục của tôi là như sau:
src - Top thư mục cấp cao (với tất cả các mã nguồn của tôi)
kiểm tra - Top thư mục cấp cao (với tất cả các xét nghiệm của tôi, có cấu trúc giống như tôi src thư mục)
nhà cung cấp - Composer file của bên thứ ba

Tôi cũng có tệp trình soạn nhạc json và tệp khóa, cũng như tệp xml phpunit ở cấp cao nhất dưới dạng tệp.

Những điều tôi đã thử

  • Thay đổi thư phpunit.xmlmục thànhtests/GeneralStringFunctions
  • Thay đổi thư phpunit.xmlmục thành./tests
  • Di chuyển phpunit.xmltệp đến teststhư mục và sau đó thay đổi thư mục thành ./thay vì tests.
  • Thêm thuộc tính hậu tố vào thẻ thư mục phpunit.xmlđể chỉ định "Kiểm tra" làm hậu tố rõ ràng.

tests/GeneralStringFunctions/GeneralStringFunctionsTestmột thư mục hay một tên tệp?
hek2mgl

@ hek2mgl Đó là một tên tệp, nó thực sự được gọi GeneralStringFunctionsTest.php. Trong giao diện dòng lệnh, tôi không nhập .phptiện ích mở rộng vì nó hoạt động mà không có nó.
Muyiwa Olu

1
OK, sau đó cấu hình của bạn sẽ hoạt động. Btw, nếu bạn chỉ định một hậu tố thì nó phải là hậu tố Test.phpchứ không phải Testtrong trường hợp của bạn, nhưng tuy nhiên, bạn có thể bỏ qua vì đó Test.phplà giá trị mặc định.
hek2mgl

@ hek2mgl Cảm ơn bạn đã quan tâm! Bạn có biết tại sao thử nghiệm của tôi không chạy với tệp cấu hình phpunit.xmlkhông?
Muyiwa Olu

Tại sao bạn không cho chúng tôi xem tệp cấu hình?
ThW

Câu trả lời:


190

Đối với những gì nó đáng giá (bị muộn), tôi đã gặp phải điều này gần đây khi tôi đang thực hiện một dự án Laravel 5.1 mới cho một trang web đơn giản. Tôi đã cố gắng gỡ lỗi nó và đã bối rối khi tôi thử:

php artisan make:test homeTest

(có kiểm tra mặc định chỉ xác nhận đúng là đúng)

và thấy đầu ra

No tests executed!

Vấn đề cuối cùng xảy ra với tôi là liên quan đến cài đặt PHP của tôi - "phpunit" đã được đăng ký toàn cầu và được định cấu hình khác nhau, trong khi phpunit đi kèm với cài đặt Laravel được định cấu hình vừa phải và chạy hoàn hảo.

Vì vậy, bản sửa lỗi đang chạy phpunit được định cấu hình của nhà cung cấp (từ cùng một thư mục gốc với app / và tests /):

./vendor/bin/phpunit

Hy vọng rằng sẽ giúp ai đó khác!


4
Tôi nghĩ rằng đây rất có thể là câu trả lời chính xác. Kể từ khi xóa dự án, tôi không có cách nào để kiểm tra lại, nhưng đối với các dự án tương lai với nhà soạn nhạc, tôi luôn sử dụng vendor/bin/phpunitthay vì phpunitnhị phân toàn cục . Tôi thậm chí còn đi xa hơn khi loại bỏ phpunitnhị phân toàn cục để không vô tình mắc lại lỗi tương tự - và nó đã không xuất hiện kể từ đó. Tôi sẽ đánh dấu đây là câu trả lời được chấp nhận, vì nó rất có thể là lý do.
Muyiwa Olu

3
gọi điện ./vendor/bin/phpunitđã thực hiện thủ thuật cho tôi khi cài đặt laravel 5.4 mới
ira

Tương tự, điều này đã giúp tôi khi làm việc trên một dự án Wordpress. Vấn đề tương tự: "phpunit" có thể được đăng ký toàn cầu và được định cấu hình khác nhau. Cảm ơn bạn đã chia sẻ!
sqsinger,

Điều này đã khắc phục sự cố cho tôi, nhưng có cách nào để khắc phục toàn cục phpunit không? Nó sẽ được tốt đẹp nếu tôi có thể chỉ cần gõphpunit
Noitidart

2
@Noitidart bạn có thể tạo aliascho ./vendor/bin/phpunit
Ganesh K

98

Tệp XML của bạn vẫn ổn. Tuy nhiên, bạn phải đảm bảo rằng các tệp PHP trong tests/thư mục của bạn được đặt tên như sau:

tests / Test.php <--- Lưu ý chữ hoa "T"
tests / user Test.php
tests / fooBar Test.php,
v.v.

Tên tệp phải kết thúc bằng "Test.php" . Đây là những gì PHPUnit đang tìm kiếm trong các thư mục.

Hơn nữa, mọi phương pháp thử nghiệm phải có tên bắt đầu bằng "thử nghiệm":

public function testFooBar()
{
    // Your test code
}

Hy vọng rằng sẽ giúp!


4
hoặc bạn có thể sử dụng --test-suffix=anything.phpđể ghi đè
checksum

đối với tôi, thật hữu ích khi thay thế đường dẫn tương đối đến thư mục thử nghiệm bằng đường dẫn tuyệt đối.
Timur Samkharadze

Làm cách nào để ghi đè điều này trong tệp cấu hình?
Jonathan

19

Trên windows, sử dụng lệnh sau trên terminal

.\vendor\bin\phpunit

đó là nếu lệnh

phpunit

trả về "Không có thử nghiệm nào được thực hiện!"

trong khi trên máy Mac

./vendor/bin/phpunit

Hy vọng nó giúp.


Cảm ơn rất nhiều cho câu trả lời của bạn, điều này thực sự hữu ích.
Goke Obasa

Hãy chắc chắn rằng không có phpunitđường dẫn chung của bạn (bạn có thể kiểm tra xem nó đang chạy thứ gì đó như thế nào phpunit --versionvà xem nó có khớp với những gì bạn mong đợi hay không. Xampp thường cài đặt một phpunit tại cùng một php bin dir. Đó là vấn đề với tôi.
giovannipds

12

Tôi đã gặp vấn đề tương tự sau khi PHPUnit trên các máy ảo của chúng tôi cập nhật lên phiên bản 6. Ngay cả --debug và --verbose cũng không nói gì hữu ích, chỉ là "Không có thử nghiệm nào được thực thi". Cuối cùng, hóa ra các lớp và không gian tên đã được thay đổi trong phiên bản mới và nó chỉ không muốn thực thi các tệp chứa tham chiếu đến các lớp cũ. Cách khắc phục đối với tôi chỉ là thay thế trong mọi trường hợp thử nghiệm:

class MyTestCase extends \PHPUnit_Framework_TestCase {...}

với:

use PHPUnit\Framework\TestCase;

class MyTestCase extends TestCase {...}

À, vâng, mặc dù có vẻ như đây không phải là câu trả lời cho câu hỏi ban đầu nhưng nó đã giải quyết được vấn đề của tôi sau khi nâng cấp lên 6.x!
Tama

Đây cũng là vấn đề đối với tôi khi nâng cấp từ PHPUnit 5.7 lên 8.5 - cảm ơn bạn đã mách nước!
xác nhận

7

Tôi nhận ra điều này rất cũ, nhưng nó cũng xảy ra với tôi. Hy vọng rằng điều này sẽ giúp một ai đó.

Vấn đề của tôi là tôi quên ký hiệu '@' trong / ** @test * /

SAI LẦM:

/** test */
function a_thread_can_be_deleted()
{
    ...
}

ĐÚNG:

/** @test */
function a_thread_can_be_deleted()
{
    ...
}

1
hơn 2 năm sau, và đây là nó cho tôi. nó thực sự phải là định dạng chính xác cho nhận xét. tôi đã có một chỗ trống trong đó. nó đã không phát hiện ra nó. những gì một chút khó chịu, trong laravel 6.1 i sử dụng các nghệ nhân làm cho chỉ huy và nó không bao gồm rằng bình luận
aibarra

1
Câu trả lời này rất hữu ích
Sundar

Tôi gặp sự cố khi tôi đang phát triển một gói. Khi tôi chạy 'php Artian make: test SomeTest' và di chuyển nó vào thư mục package tests, nhận xét của phương thức testExample cơ bản chỉ chứa mô tả cơ bản @return voidvà không chứa '@test', đó là lý do phpunit không thể xác định nó như một bài kiểm tra.
DAMIEN JIANG

5

Tôi vò đầu bứt tóc trong 10 phút trước khi quyết định sử dụng --debug (nhân tiện) để khám phá ra sự thật đơn giản rằng tên tệp không tôn trọng quy ước đặt tên , tôi có thêm một chữ "s" ở cuối .

Sai lầm

CreateAdminTests

đúng

CreateAdminTest

hy vọng ghi chú này có thể giúp ích cho ai đó


Tuyệt vời, tôi đã có thể chạy thử nghiệm sau đó
WindSaber.

4

Bạn chỉ cần gọi nó từ tệp nhà cung cấp

vendor\bin\phpunit Chú ý \ Không /



2

nếu bạn đang sử dụng PHPSTORM, hãy đi tới Cài đặt rồi đi tới

  • Test Frameworks

    và nhấp vào + và chọn

  • PHPUnit Local sau đó

  • Use Composer Auto Loader sau đó dán cái này như trong đường dẫn đến trường tập lệnh

  • C:\{YOUR PROJECT NAME}\vendor\autoload.php

  • bấm OK

  • HAPPY TESTING


2

Kiểm tra tệp phpunit.xml , xem bên trong testsuites.

Phiên bản phpunit (2019) của tôi đang tìm kiếm các tệp có đuôi (hậu tố) * Test.php. Vì vậy, hãy đảm bảo rằng tất cả các tệp thử nghiệm được đặt tên đúng (ví dụ: BookTest.php là đúng, BookTests.php thì không, BookTestCase.php thì không).


2

Đến bữa tiệc muộn, nhưng thông tin này có thể giúp ích cho những người khác.

Các giải pháp trên không làm việc cho tôi. Kể từ Laravel 7.x, theo mặc định, PHPUnit chỉ thực thi các tệp PHP có hậu tố là "Test.php". Ví dụ: nếu bạn tạo một bài kiểm tra, đặt tên nó CreateUsersẽ không hoạt động, trong khi đặt tên nó CreateUserTestsẽ hoạt động.

Để khắc phục hạn chế, hãy truy cập phpunit.xmlvà sửa đổi suffixthuộc tính từ directorycác phần tử:

...
<testsuite name="Unit">

    <!-- modify suffix -->
    <directory suffix=".php">./tests/Unit</directory>

</testsuite>
<testsuite name="Feature">

    <!-- modify suffix -->
    <directory suffix=".php">./tests/Feature</directory>

</testsuite>
...

Điều này sẽ hướng dẫn PHPUnit chạy tất cả các tệp có .phpphần mở rộng từ các thư mục. Lưu ý xóa bộ nhớ cache của ứng dụng sau khi cập nhật phpunit.xml:

php artisan config:cache

Thông tin bổ sung về cấu hình PHPUnit XML có thể được tìm thấy tại đây: https://phpunit.de/manual/6.5/en/appendes.configuration.html


1

Bạn đã thêm bộ thử nghiệm vào tệp phpunit.xml của mình chưa?

<phpunit>
    <testsuite name="app1" >
        <directory>./</directory>
    </testsuite>
</phpunit>

Bạn có thể thêm nhiều thư mục vào đó.


Xin chào, xin lỗi nếu tôi không nói rõ trong câu hỏi, nhưng tôi đã thêm một bộ thử nghiệm và tên tương ứng vào tệp XML. Bạn có thể tìm thấy bản sao tại đây: pastebin.com/0j0L4WBD .
Muyiwa Olu

Hãy thử <directory> ./tests </directory>
Aine

Cảm ơn bạn đã cập nhật, rất tiếc là tôi vẫn gặp sự cố tương tự với ./tests làm thư mục của tôi. Time: 28 ms, Memory: 1.50Mb No tests executed!
Muyiwa Olu

Thật không may là cùng một vấn đề :( Configuration read from /Users/muyiwa/Projects/Web Development/DatabaseHelper/phpunit.xml Time: 66 ms, Memory: 1.50Mb No tests executed!. Nó chắc chắn hoạt động khi tôi tự tham khảo nó, nó chỉ không giống như tải từ tập tin cấu hình cho một số lý do :(
Muyiwa Olu

Lần đoán cuối cùng. Hãy thử di chuyển tệp phpunit.xml vào thư mục tests /. Trong tệp, thay đổi thư mục thành <directory> ./ </directory>.
Aine

0

Đối với tôi, bằng cách sử dụng phpunit --debug đã cho tôi biết thử nghiệm nào mà nó không thực thi, bên trong, tôi có

$this->visit('/')
         ->see('Laravel');

và tôi nghĩ rằng vì thư mục được bảo vệ bằng xác thực .htaccess, nên nó không thể truy cập trang

Giải pháp cho tôi là thực hiện thử nghiệm này (hoặc rất có thể là thực hiện xác thực .htaccess)


0

Điều này là rất muộn nhưng tôi hy vọng nó sẽ giúp ai đó.

Tôi đã chạy thử nghiệm của mình bằng cách sử dụng tham chiếu tuyệt đối. cấu trúc thư mục [project / tests / test.php]

dòng thư mục của tôi trông như thế này ./tests/test.php


0

Có thể có một chút ở bên cạnh, nhưng nếu bạn (giống như tôi) sử dụng Laravel trong Vagrant, hãy đảm bảo rằng bạn đang chạy phpunit bên trong hộp vagrant chứ không phải ở "phía cửa sổ". :)


0

Tôi đã gặp vấn đề không có thử nghiệm nào được thực hiện, ngay cả khi mọi thứ được thiết lập tốt.

Nguyên nhân là không gian tên không phải là lệnh đầu tiên của tệp, nó nằm sau một số nhận xét của khối doc.

hoàn nguyên khiến phpunit xem các thử nghiệm và chạy chính xác.


0

Của tôi là một chút buồn cười.

Khi tôi sử dụng, php artisan make:testtôi đã vô tình đặt .php như ProductRewardPointController.phpđã tạo ProductRewardPointController.php.phpphpunit đơn giản là bỏ qua nó.

Tôi chỉ xóa .php thừa và mọi thứ trở lại bình thường


0

Tôi đã gặp vấn đề tương tự là Không có thử nghiệm nào được thực hiện! , được giải quyết bằng cách giữ nguyên tên tệp và tên lớp .


0

Nếu bạn đang sử dụng các IDE như JetBrains PHPStorm , cũng xin lưu ý rằng: trong Run/Debug Configurationscửa sổ, Test scopecần phải được đặt thành directoryvà trỏ teststhư mục đó đến vị trí thư mục của bạn .

Tôi chỉ mất nửa giờ để tìm ra tôi đã quên cài đặt danh bạ. Bạn có thể sử dụng toàn cầu phpunit.pharmiễn là bạn đặt phạm vi kiểm tra và thư mục chính xác, IDE sẽ xử lý các nội dung khác cho bạn.


0

Tên hàm trong tệp thử nghiệm phải được bắt đầu bằng testhoặc phải có chú thích được thêm vào trước hàm

/** @test */

Đảm bảo rằng nó không

/* @test */

bởi vì điều đó không hiệu quả. cần phải có hai dấu hoa thị sau dấu gạch chéo chứ không phải một.


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.