我在StackOverflow上问了这个问题,有人建议我在这里问。
我熟悉单元/系统/集成测试,并且希望能够测试我的Joomla组件。有这样做的标准方法吗?
我正在研究这个joomla mvc组件示例,其中不包含测试。我在Joomla文档和各个网站上都能找到的只是测试代码和bootstrap.php文件的片段。我特别想知道的是:
- 组件测试代码放在哪里
- 我是否需要提供自己的bootstrap.php,还是有某种方法可以仅“包括joomla”并运行测试
理想情况下,有人可以将我定向到一个开放源代码的Joomla组件,该组件具有有关如何运行它们的测试和说明(快速浏览,前5个左右没有测试)。
我找到的最接近的是this,它基于我的虚拟测试。
到目前为止我做了什么
组件目录结构:
- 你好,世界/
- 管理员/
- ...
- 测试/
- bootstrap.php
- phpunit.xml
- modelHelloWorldsTest.php
- 现场/
- ...
- helloworld.xml
- 管理员/
第一次尝试
要运行测试,我将组件安装/复制到我的Joomla安装中。然后,我从〜joomla / administration / components / com_helloworld / tests运行以下命令:
php phpunit-4.2.phar --bootstrap bootstrap.php .
我从中收到
Fatal error: Class 'ContentController' not found in C:\inetpub\wwwroot\ws_cairnstest\administrator\components\com_helloworld\tests\modelsHelloWorldsTest.php on line 5
我收集到这意味着我的bootstrap.php不正确,并且尚未加载必要的Joomla类。我会在某个时候对此进行调查,但这似乎是为了进行一些测试而进行的大量设置。
bootstrap.php:
<?php
error_reporting(E_ALL);
define('_JEXEC', 1);
define('BASEPATH',realpath(dirname(__FILE__).'/../../'));
define('JOOMLA_PATH',realpath(dirname(__FILE__).'/../../../../../'));
define('JOOMLA_ADMIN_PATH',realpath(dirname(__FILE__).'/../../../../'));
$_SERVER['HTTP_HOST'] = 'localhost';
$_SERVER['REQUEST_METHOD'] = 'GET';
if (file_exists(JOOMLA_ADMIN_PATH . '/defines.php'))
{
include_once JOOMLA_ADMIN_PATH . '/defines.php';
}
if (!defined('_JDEFINES'))
{
define('JPATH_BASE', JOOMLA_ADMIN_PATH);
require_once JPATH_BASE . '/includes/defines.php';
}
require_once JPATH_BASE . '/includes/framework.php';
require_once JPATH_BASE . '/includes/helper.php';
require_once JPATH_BASE . '/includes/toolbar.php';
define('JPATH_COMPONENT',JOOMLA_ADMIN_PATH.'/components/com_content');
$app = JFactory::getApplication('administrator');
include BASEPATH.'/controller.php';
modelsHelloWorldsTest.php:
<?php
class HelloWorldsTest extends \PHPUnit_Framework_TestCase {
public function testList(){
$c = new ContentController();
$model = $c->getModel('helloworlds');
$worlds = $model->getItems();
var_dump($worlds);
$this->assertNotEmpty($worlds);
}
}
phpunit.xml:
<phpunit bootstrap="bootstrap.php"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false"
syntaxCheck="false"
verbose="true">
</phpunit>
第二次尝试
看到此答案后,我将测试放在我的joomla安装下的test / unit下,将phpunit.dist.xml和bootstrap.php从joomla-cms存储库复制到它们的适当位置,并且仍然
Fatal error: Class 'ContentController' not found in C:\inetpub\wwwroot\ws_cairnstest\administrator\components\com_helloworld\tests\modelsHelloWorldsTest.php on line 5
我之前收到的错误。