StackOverflow bu soruyu sordum ve burada sormak önerildi.
Birim / sistem / entegrasyon testine aşinayım ve Joomla bileşenimi test edebilmek istiyorum. Bunu yapmanın standart bir yolu var mı?
Testleri içermeyen bu joomla mvc bileşen örneği üzerinde çalışıyorum . Joomla belgelerinde ve çeşitli web sitelerinde bulabildiğim tek şey test kodu ve bootstrap.php dosyalarının parçaları. Özellikle bilmek istiyorum:
- Bileşen test kodu nereye yerleştirilir
- Kendi bootstrap.php dosyasını sağlamalı mıyım yoksa sadece 'joomla'yı dahil etmenin ve testlerimi çalıştırmanın bir yolu var mı?
İdeal olarak birisi beni nasıl çalıştıracağına dair test ve talimatlara sahip bir açık kaynak Joomla bileşenine yönlendirebilir (hızlı bir bakışa sahipti, ilk 5 ya da öylesine test yoktu).
En yakın bulduğum, bu benim kukla testime dayanıyorum.
Şimdiye kadar ne yaptım
Bileşen dizin yapısı:
- Selam Dünya/
- admin /
- ...
- testler /
- bootstrap.php
- phpunit.xml
- modelHelloWorldsTest.php
- Site /
- ...
- helloworld.xml
- admin /
İlk girişim
Testleri çalıştırmak için bileşeni Joomla kurulumuma yüklerim / kopyalarım. Sonra ~ joomla / administration / components / com_helloworld / testing'den aşağıdaki komutu çalıştırıyorum:
php phpunit-4.2.phar --bootstrap bootstrap.php .
ondan aldığım
Fatal error: Class 'ContentController' not found in C:\inetpub\wwwroot\ws_cairnstest\administrator\components\com_helloworld\tests\modelsHelloWorldsTest.php on line 5
Bu, bootstrap.php'nin doğru olmadığı ve gerekli Joomla sınıflarını yüklemediği anlamına gelir. Bunu bir noktada araştıracağım, ancak bu sadece bazı testlerin yapılması için bir sürü kurulum gibi görünüyor.
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>
İkinci deneme
Bu cevabı gördükten sonra testlerimi joomla kurulumumun altında test / birim altına koydum, joomla-cms deposundan phpunit.dist.xml ve bootstrap.php'yi uygun yerlerine kopyaladım ve hala
Fatal error: Class 'ContentController' not found in C:\inetpub\wwwroot\ws_cairnstest\administrator\components\com_helloworld\tests\modelsHelloWorldsTest.php on line 5
daha önce aldığım hata.