PHPUnit的引导在PhpStorm(PHPUnit bootstrap in PhpStorm)

2019-08-16 19:24发布

我与Zend框架2的工作,我想在PhpStorm 5.0.4运行我所有的单元测试。 我有PhpStorm建立以检查测试myproject/module ,它成功地找到我的测试。 问题是,它不读取每个模块,这是需要(它指向一个引导文件)内我的配置文件。

下面是一个模块(目录结构源 ):

/module
    /User
        /tests
            /UserTest
                /Model
                    /UserTest.php
            Bootstrap.php
            phpunit.xml.dist
            TestConfig.php.dist

当我运行测试,它给了我一个错误,因为Bootstrap.php没有在运行之前运行UserTest.php 。 所有的文件都是正确的,因为如果我cd/myproject/module/User/tests/并运行phpunit终端内,它工作正常。

我想它在每一模块内使用的配置(并由此自举)。 我试图用--configuration选择使用相对路径,但我无法得到它的工作。

这是我目前的配置:

关于如何可以运行该配置文件(和自举)当一个模块被测试任何指针? 也就是说,一个模块都有自己的配置文件和引导。

提前致谢。

Answer 1:

PHP风暴7假定你将只需要一个默认的启动文件,因此不直接使各个bootsrap文件每个PHPUnit的测试配置。

然而,ZF2进行对每个模块为基础的测试。 因此,你设置的默认值至第一个模块后,其他模块不能正常工作。 解决这个问题的办法是

  1. 在文件中删除默认选项|设置| PHP | PHPUnit的您不必删除默认的配置文件,但是你必须空出,并取消默认的引导文件。 只是取消选中是不够的

  2. 去运行,|编辑配置(还有其他的快捷键,此框)为您必须创建一个测试配置中的每个模块。 例如,你也会有专门的标准应用模块,因此“应用程序模块测试”吧,也许一个管理模块,然后在“管理模块测试”

  3. 对于每个测试(假设标准ZF2目录结构)

一个。 测试范围:目录湾 目录:C:\瓦帕\ WWW \ PROJECT-NAME \模块\ MODULE-NAME \试验C。 勾选“使用可选的配置文件:” d。 输入C:\瓦帕\ WWW \ PROJECT-NAME \模块\ MODULE-NAME \测试\ MODULE-NAMETest \ phpunit.xml.dist即 在 “测试运行选项”,进入 “--bootstrap C:\ WAMP \ WWW \ PROJECT-NAME \模块\ MODULE-NAME \测试\ MODULE-NAMETest \ bootstrap.php中”

  1. 重复下一个模块

这里的问题是,只要默认bootsrap领域有一个条目,phpstorm将添加默认的--bootstrap选项你把在任何情况下的具体测试运行选项之后。 所以,不管你做什么,你最终跑错引导文件每次除了第一/默认测试用例

希望这可以帮助



Answer 2:

除非我错过了一些东西,你必须设置每个模块的测试配置。 你的情况,你的myproject。 相反,你会希望每个模块一个,然后设置为每个(使用可选的配置文件)的配置。



Answer 3:

我利用在运行配置环境变量选项定义值我可以使用全局的bootstrap.php内特定于应用程序的特定模块或部分需求拉动的。

class GlobalBootstrap
{

private static $applicationSections = [
    'section_a',
    'section_b',
    'section_c'
];

public static function init()
{
    $localMethod = self::fetchLocalMethod();
    if (!is_null($localMethod)) {
        self::$localMethod();
    } else {
       throw new Exception(
            __CLASS__
            . '::'
            . __FUNCTION__
            . 'Says: No local method has been defined for this test section'
        );
    }
}

private static function fetchLocalMethod()
{
    $section = getenv('APPLICATION_SECTION');
    if (is_null($section) || !in_array($section, self::$applicationSections)) {
        return null;
    }
    $section = preg_replace("/[^a-zA-Z]+/", "", $section);
    $method = 'bootstrap' . ucfirst(strtolower($section));

    return $method;
}

/**
 * Section specific methods
 */

protected static function bootstrapSectiona()
{
    require __DIR__ . '/../../{section_a}/module/Test/Bootstrap.php';
}
}

GlobalBootstrap::init();

一任意变量和值可以被创建,然后使用在bootstrap.php中引用:getevn(VARIABLE_NAME); 这样可以节省很多PHPStorm冗长的配置,但culd可能同样获得尽可能复杂,如果你依赖于很多不同的引导功能。



文章来源: PHPUnit bootstrap in PhpStorm