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