使用 Codeception 进行单元测试:解析错误

Posted

技术标签:

【中文标题】使用 Codeception 进行单元测试:解析错误【英文标题】:Unit testing with Codeception: parsing error 【发布时间】:2020-10-30 09:50:52 【问题描述】:

我正在尝试为我的简单网站(用于学习)编写一些单元测试。

项目结构:

在 index.php 中我定义了一个 namespace Main

函数位于namespace Main\Logic,类位于namespace Main\Logic\Classes

tests/unit/BuildGalleryTest.php 的代码:

<?php

namespace Tests\Unit;

use Codeception\Test\Unit as TestCase;

use function Main\Logic\galleryBuilder;

require "/Users/l.marder/Homeworks/php-study/lesson4/logic/galleryBuilder.php";

class BuildGalleryTest extends TestCase


    /**
     * @dataProvider buildGalleryDataProvider
     * @param string $imgPack
     * @param string $expectedResponse
     */
    public function testBuildGallery(string $imgPack, string $expectedResponse): void
    
        $actualResponse = galleryBuilder("tests/unit/test_data/img/$imgPack");
        self::assertEquals($expectedResponse, $actualResponse);
    

    public function buildGalleryDataProvider(): array
    
        return
            [
                "Data pack 1: one pic" => [
                    "1",
                    $this->buildTestGallery("1")
                ],
                "Data pack 2: two pics with folder and text.txt file" => [
                    "2",
                    $this->buildTestGallery("2")
                ],
                "Data pack 3: no images" => [
                    "3",
                    $this->buildTestGallery("3")
                ]
            ];
    

    private function buildTestGallery(string $dataPack): string
    
        if ($dataPack === "1") 
            return "
            <a href=\"picture.php?img=tests/unit/test_data/img/1/1.img\" target=\"_blank\">
                <div class=\"small-pic\">
                    <img class=\"img-small-kit\" src= alt=\"Kitty 2\">
                </div>
            </a>";
        
        if ($dataPack === "2") 
            return "
            <a href=\"picture.php?img=tests/unit/test_data/img/2/1.img\" target=\"_blank\">
                <div class=\"small-pic\">
                    <img class=\"img-small-kit\" src=tests/unit/test_data/img/2/1.img alt=\"Kitty 2\">
                </div>
            </a>
            <a href=\"picture.php?img=tests/unit/test_data/img/2/2.img\" target=\"_blank\">
                <div class=\"small-pic\">
                    <img class=\"img-small-kit\" src=tests/unit/test_data/img/2/2.img alt=\"Kitty 3\">
                </div>
            </a>";
        
        if ($dataPack === "3") 
            return "<img class=\"img-big-pic\" src=tests/unit/test_data/3/404.gif alt=\"Kitty Pic\">";
        

        return "";
    


运行php vendor/bin/codecept run 时出现以下错误:

In Parser.php line 128:
                                                                                                                     
  Couldn't parse test '/Users/l.marder/Homeworks/php-study/lesson4/tests/unit/logic/BuildGalleryTest.php' on line 9  
  syntax error, unexpected 'int' (T_STRING), expecting function (T_FUNCTION) or const (T_CONST)      

我做错了什么?有什么办法可以解决这个问题?

【问题讨论】:

您在命令行上运行的是哪个版本的 PHP? php -v会给你答案。 我使用的是 PHP 7.2.31 【参考方案1】:

我已使用 sphp 将 php 版本更改为 7.4,现在一切正常!

【讨论】:

以上是关于使用 Codeception 进行单元测试:解析错误的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Codeception 功能测试中使用 PHPUnit 断言方法?

Yii2中如何使用CodeCeption

Yii2中如何使用CodeCeption

带有 Codeception 的 Laravel 4 模型单元测试 - 未找到“Eloquent”类

codeception - 模拟 api 调用数据

有没有办法控制 Codeception 中的测试顺序?