4

我正在使用 Zend Framework 2,我想在 PhpStorm 5.0.4 中为我的所有模块运行测试。我设置了 PhpStorm 来检查测试myproject/module,它成功地找到了我的测试。问题是它没有在每个模块中读取我需要的配置文件(它指向引导文件)。

这是模块的目录结构(source):

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

当我运行测试时,它给了我一个错误,因为Bootstrap.phpis not run before running UserTest.php。所有文件都是正确的,因为如果我cd在终端中/myproject/module/User/tests/运行,它工作正常。phpunit

我希望它在每个模块中使用配置(从而引导)。我尝试使用--configuration具有相对路径的选项,但我无法让它工作。

这是我当前的配置:

PhpStorm PHPUnit 配置

关于在测试模块时如何运行配置文件(和引导程序)的任何指示?也就是说,一个模块有自己的配置文件和引导程序。

提前致谢。

4

3 回答 3

3

PHP Storm 7 假设您只需要一个默认引导文件,因此不会为每个 PHPUnit 测试配置直接启用单独的引导文件。

但是,zf2 以每个模块为基础进行测试。因此,在您将默认值设置为第一个模块后,其他模块将不起作用。解决这个问题的方法是

  1. 删除 File|Settings|PHP|PHPUnit 中的默认选项 您不必删除默认配置文件,但必须 EMPTY OUT 并取消选中默认引导文件。仅取消选中是不够的

  2. 运行|编辑配置(此框还有其他快捷方式) 对于每个模块,您必须创建一个测试配置。例如,您将拥有标准的应用程序模块,因此有一个“应用程序模块测试”,可能是一个管理模块,然后是一个“管理模块测试”

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

一个。测试范围:目录b。目录:C:\wamp\www\PROJECT-NAME\module\MODULE-NAME\test c. 选中“使用替代配置文件:” d。输入 C:\wamp\www\PROJECT-NAME\module\MODULE-NAME\test\MODULE-NAMETest\phpunit.xml.dist e。在“Test Runner options”中,输入“--bootstrap C:\wamp\www\PROJECT-NAME\module\MODULE-NAME\test\MODULE-NAMETest\Bootstrap.php”

  1. 重复下一个模块

这里的问题是,只要默认的 bootsrap 字段有一个条目,phpstorm 就会将其添加为默认的 --bootstrap 选项,无论您在案例特定的 Test Runner 选项中添加什么。所以,无论你做什么,你最终都会运行错误的引导文件,除了第一个/默认测试用例

希望这可以帮助

于 2013-12-05T01:44:25.890 回答
1

除非我遗漏了什么,否则您必须为每个模块设置一个测试配置。在你的情况下,你有 myproject。相反,您需要为每个模块设置一个,然后为每个模块设置配置(使用替代配置文件)。

于 2013-02-09T10:58:11.083 回答
0

我利用运行配置中的环境变量选项来定义一个值,我可以在全局 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 中节省了大量冗长的配置,但如果您依赖许多不同的引导功能,可能会变得同样复杂。

于 2017-11-17T13:32:57.620 回答