使用 PHPUnit 運行測試時,如果看到 "No tests executed" 的消息,這通常代表 PHPUnit 沒有找到或執行任何測試。

錯誤原因

運行 PHPUnit 時出現 No tests executed 錯誤訊息,例如下圖。

No tests executed

以下是一些可能的原因。

確認測試文件命名

PHPUnit 通常要求測試檔案的命名符合一定的規範。通常,測試檔案的名稱應該以 Test.php 結尾。例如:ExampleTest.php

確認測試目錄結構

確保你的測試位於正確的目錄,並且 PHPUnit 的配置文件(phpunit.xml)指向了包含測試的正確目錄。

檢查 PHPUnit 設定

檢查 phpunit.xml 設定文件,確保它包含了正確的測試目錄。有時,如果設定不正確,PHPUnit 可能無法找到測試的檔案。

確認測試方法的命名

測試方法通常應以 test 開頭,例如 testExampleFunction()。此外,你也可以使用 @test 註解來標記方法為測試,不過這個方法盡量少用,它有可能在未來的 PHPUnit 版本被棄用。

確認是否有過濾條件

如果使用 --filter 選項來運行特定的測試,確保過濾條件是正確的。

檢查代碼錯誤

確保測試代碼沒有語法錯誤或其他問題,這可能會導致 PHPUnit 無法正常執行測試。

確認 PHPUnit 版本

如果你的測試是針對特定版本的 PHPUnit 編寫的,請確保你正在使用與測試相容的 PHPUnit 版本。

運行 PHPUnit 與詳細的輸出

使用 --verbose 選項運行 PHPUnit,以獲得更多關於它正在做什麼的訊息。例如:

phpunit --verbose。

檢查 autoload 配置

如果你使用的是 composer 來管理依賴,確保正確設定了自動載入的程式語法,並且在運行測試之前執行 composer dump-autoload 將自動載入對應的規格更新。

解決 No tests executed 實例

檢查文件檔名

請先確認執行單元測試的目錄下的 php 檔案是否為 Test 結尾,排除目錄及檔案名稱的問題,例如

HomeControllerTest.php

檢查 PHPUnit 版本

如果還是發生 No tests executed,最可能的原因不在於你把 PHPUnit 裝在那裡,而是執行的 PHPUnit 版本,所要 extends 的 Class 不同。

舉個例子,以下是程式碼片段


namespace Tests\Controllers;

use Slim\App;
use Slim\Http\Request;
use Slim\Http\Response;
use Slim\Http\Environment;

/**
 * This is an example class that shows how you could set up a method that
 * runs the application. Note that it doesn't cover all use-cases and is
 * tuned to the specifics of this skeleton app, so if your needs are
 * different, you'll need to change it.
 */
class BaseTestCase extends \PHPUnit_Framework_TestCase
{
    /**
     * Use middleware when running application?
     *
     * @var bool
     */
    protected $withMiddleware = true;

class BaseTestCase extends \PHPUnit_Framework_TestCase

替換成

class BaseTestCase extends \PHPUnit\Framework\TestCase

No tests executed 即消失。程式碼也可以順利運行。

解決方法

主要的原在在於 PHP Unit 在版本 6.x 以後,使用的 Class 為 \PHPUnit\Framework\TestCase 而不是 PHPUnit_Framework_TestCase。如果你也有這個問題,解決之道為升級版本,或者在要單元測試的 Code 修改相對應的 Class。

總結

這篇文章列出了執行 PHPUnit 出現 No tests executed 的原因和解決方法,檢查這些項目,並逐一排除可能的問題。應該可以順利解決這個問題。

最後修改日期: 2023-06-21

作者

留言

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。