簡體   English   中英

Codeception 中的單元測試:如何將 Codeception 指向我的代碼?

[英]Unit test in Codeception: How to point Codeception to my code?

我正在編寫一組簡單的 PHP 函數,我只使用純 PHP7,沒有框架,什么都沒有。 這些函數稍后將在 CMS 的插件中使用,但這不是重點。 我想使用 Codeception 為我的函數編寫單元測試(為了熟悉它,我知道 Codeception 基本上只在此處運行 PHPUnit),但我真的不知道如何以合理的方式將 Codeception 指向我的代碼。

我的結構如下:我有path/to/functions.php ,其中包含我要測試的功能,大致如下:

<?php

namespace App;

if (!defined('CONST')) {
    die('What are you doing? Get out of here!');
}

function change_string($string){
    return $string . '123';
}

我使用 Composer 將 Codeception 安裝到項目的根目錄,並使用 Codeception bootstrap 開始,然后我還使用 Codeception 生成單元測試文件,並在其中添加了單元測試。 現在大多數關於該主題的教程/解釋/文章只是編寫測試,而 Codeception 神奇地知道在哪里可以找到要測試的代碼。 這對我來說是零意義,在我的情況下不起作用。 所以我做的是以下內容:

<?php

class NamesPathsTest extends \Codeception\Test\Unit
{
    /**
     * @var \UnitTester
     */
    protected $tester;
    
    protected function _before()
    {
        defined('CONST') or define('CONST', 'XXX');
        require_once('path/to/functions.php');
    }

    protected function _after()
    {
    }

    // tests
    public function testChangeString() {
        $this->assertEquals('a123',App\change_string('a'));
    }
}

這可行,但我認為必須有一種更好的方法來向 Codeception 解釋要運行的代碼在哪里,而不是使用require_once('path/to/functions.php') 這個怎么做? 將 Codeception 指向我的代碼的聰明方法是什么? 它還可以處理定義常量,以便我可以實際測試功能嗎?

您的應用程序代碼如何知道函數和類在哪里?

神奇的成分稱為自動加載

由於您已經在使用 Composer,最簡單的方法是配置 Composer 以加載您的類和函數。

自動加載僅適用於類,對於它們,您可以將 map命名空間前綴添加到目錄

{
    "autoload": {
        "psr-4": {
            "Monolog\\": "src/",
            "Vendor\\Namespace\\": ""
        }
    }
}

必須包含包含函數的文件,但 Composer也有幫助:

{
    "autoload": {
        "files": ["path/to/functions.php"]
    }
}

綜合結果:

{
    "autoload": {
        "files": ["path/to/functions.php"]
        "psr-4": {
            "Monolog\\": "src/",
            "Vendor\\Namespace\\": ""
        }
    }
}

由於 Codeception 是使用 Composer 安裝的,因此無需額外工作即可在測試中進行自動加載工作。 要從應用程序代碼中的自動加載中受益,您必須require 'vendor/autoload.php'; 在入口點附近。

關於您經常提出的問題,沒有人使用這種方式來防止直接執行文件,將代碼從公共目錄中移出並只留下可以在公共目錄中直接訪問的小 index.php 文件更簡單,更安全。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM