ฉันได้ถามคำถามนี้กับStackOverflowและมีข้อเสนอแนะให้ฉันถามที่นี่
ฉันคุ้นเคยกับการทดสอบหน่วย / ระบบ / บูรณาการและต้องการที่จะสามารถทดสอบองค์ประกอบ Joomla ของฉัน มีวิธีมาตรฐานในการทำเช่นนี้หรือไม่?
ฉันกำลังทำงานผ่านตัวอย่างส่วนประกอบ joomla mvcซึ่งไม่รวมการทดสอบ ทั้งหมดที่ฉันสามารถพบได้ในเอกสารประกอบ Joomla และในเว็บไซต์ต่าง ๆ คือส่วนของรหัสทดสอบและไฟล์ bootstrap.php โดยเฉพาะสิ่งที่ฉันอยากรู้คือ:
- รหัสการทดสอบส่วนประกอบจะอยู่ที่ไหน
- ฉันต้องให้ bootstrap.php ของตัวเองหรือมีวิธีการเพียงแค่รวม 'joomla' และทำการทดสอบของฉัน
นึกคิดใครบางคนสามารถพาฉันไปยังส่วนประกอบ Joomla ที่มาเปิดที่มีการทดสอบ & คำแนะนำเกี่ยวกับวิธีการเรียกใช้พวกเขา (มีลักษณะอย่างรวดเร็ว, 5 คนแรกหรือดังนั้นจึงไม่มีการทดสอบ)
สิ่งที่ฉันพบมากที่สุดคือสิ่งนี้ซึ่งฉันได้ทำการทดสอบแบบหลอก ๆ
สิ่งที่ฉันทำไปแล้ว
โครงสร้างไดเรกทอรีส่วนประกอบ:
- สวัสดีชาวโลก/
- admin /
- ...
- การทดสอบ /
- bootstrap.php
- phpunit.xml
- modelHelloWorldsTest.php
- เว็บไซต์/
- ...
- helloworld.xml
- admin /
ความพยายามครั้งแรก
ในการรันการทดสอบฉันติดตั้ง / คัดลอกส่วนประกอบไปยังการติดตั้ง 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 ของฉันคัดลอก phpunit.dist.xml และ bootstrap.php จาก joomla-cms repo ไปยังตำแหน่งที่เหมาะสมและยังคงได้
Fatal error: Class 'ContentController' not found in C:\inetpub\wwwroot\ws_cairnstest\administrator\components\com_helloworld\tests\modelsHelloWorldsTest.php on line 5
ข้อผิดพลาดที่ฉันได้รับมาก่อน