Plugins 在同一个插件中,如何有两个与不同应用程序相关的测试套件?

Plugins 在同一个插件中,如何有两个与不同应用程序相关的测试套件?,plugins,symfony1,phpunit,Plugins,Symfony1,Phpunit,我目前正在sfPhpUnitPlugin的一个SF1.4项目中工作,我面临着插件测试的问题 我有一个插件,可以在几个应用程序上使用,我想每个应用程序有一个测试套件。如何组织测试,以便能够轻松地将夹具和测试与特定应用程序相匹配 我的套件是此模板的副本,随sfPhpunitPlugin一起提供: <?php class {className} extends sfBasePhpunitTestSuite implements sfPhpunitContextInitilizerInter

我目前正在sfPhpUnitPlugin的一个SF1.4项目中工作,我面临着插件测试的问题

我有一个插件,可以在几个应用程序上使用,我想每个应用程序有一个测试套件。如何组织测试,以便能够轻松地将夹具和测试与特定应用程序相匹配

我的套件是此模板的副本,随sfPhpunitPlugin一起提供:

<?php

class {className} extends sfBasePhpunitTestSuite
  implements sfPhpunitContextInitilizerInterface
{
    /**
     * Dev hook for custom "setUp" stuff
     */
    protected function _start()
    {
      $this->_initFilters();
    }

    /**
     * Dev hook for custom "tearDown" stuff
     */
    protected function _end()
    {
    }

    protected function _initFilters()
    {
      $filters = sfConfig::get('app_sfPhpunitPlugin_filter', array());
      foreach ($filters as $filter) {
        PHPUnit_Util_Filter::addDirectoryToFilter($filter['path'], $filter['ext']);
      }
    }

    public function getApplication()
    {
      return '{application}';
    }
}
但是我很难确定路径键是什么样子,我觉得它应该是一个完整的路径,因为include_路径不包含调用
addDirectoryToFilter()
时我正在测试的插件的路径。 有什么建议吗?
有人这样做了吗?

实际上,您必须创建两个实现SFPHPUnitContextIninitizerInterface接口的套件类,并实现所有必需的方法

然后将这两个套件放在两个不同的文件夹中,例如:

SF_PLUGIN_DIR/YOUR_PLUGIN/test/phpunit/unit/app1/App1TestSuite.php SF_PLUGIN_DIR/YOUR_PLUGIN/test/phpunit/unit/app2/App2TestSuite.php

目录app1或子目录中的所有测试都将在App1TestSuite.php中定义的symfony应用程序中运行,并且app2目录的规则相同

如果您想在不同的应用程序中动态运行测试,可以在接口(GetEnvironment和getApplication)所需的方法中定义此逻辑


如果您还有任何问题,请随时问我。

应用程序是由
getApplication()
方法定义的吗?使用您的方法,我在应用程序中添加的配置(请参阅问题)是否仍然需要?过滤器功能与设置应用程序上下文无关。在下一个插件版本中,我将删除它,因为在phpunit 3.5版本中,过滤器行为发生了更改。app.yml不再用于插件配置,而是插件拥有自己的名为phpunit.ymlsfPhpunitContextInitilizerInterface定义了两个方法getApplication和getEnvironment。这两种方法都应该返回字符串表示的应用程序和环境。设置配置和初始化上下文的所有其他工作都将在插件内部完成。如果您想详细了解SFBasePhpunitestSite::setupContext方法。感谢您的解释,我刚刚看过这个方法,它更清晰!
testunit:
  sfPhpunitPlugin:
    filter:
      - {path: 'backend', ext: '.php'}