Это старая версия Справка/QS/ExtTests за 2017-12-15 21:51:04..

Автоматические тесты для расширений


Начиная с версии QS 5, можно создавать автоматические тесты для расширений.

Правила:
– тесты должны лежать в папке tests расширения. Файлов с тестами может быть несколько.
Пример можно найти в AdvOntology

Запуск:
– для расширения, имеющего тесты, в Панели адиминистратора появится кнопка «Запустить тесты (Run tests)". Нажмите её для запуска тестов.

Пример тестов


(основной функцией является testAssertEqual)

Простейший тест
<?php
$res 
implode(",", array("1","2"));
echo 
testAssertEqual("implode1"$res"1,2");
?>


Пример тестов для AdvOntologу
с предварительным созданием таблиц

<?php
/* @var $this Wacko */
$srvOnto $this->srvFactory "AdvOntology" ); /* @var $srvOnto Service_AdvOntology */

if(!$srvOnto->typeExists("TestType")) {
    
// making test type first
    
    
echo "Install TestType first - please refresh to run real tests";
    
    
$srvOnto->addType("TestType","varchar(200)");
    
$srvOnto->addTypeField("TestType""fld1""int(11)""0");
    
$srvOnto->addTypeField("TestType""fld2""varchar(200)""");
    
$srvOnto->addTypeField("TestType""fld3""text""");
    
$srvOnto->addTypeField("TestType""fld4""int(11)""0");
    
    
$srvOnto->addConcept("TestType""v10"); // in first id we save version of test environment
    
$srvOnto->addConcept("TestType""text1""", array("fld1" => 1"fld4" => 1));
    
$srvOnto->addConcept("TestType""text2""", array("fld1" => 2"fld4" => 2));
    
$srvOnto->addConcept("TestType""text3""", array("fld1" => 3"fld4" => 1));
    
$srvOnto->addConcept("TestType""text4""", array("fld1" => 4"fld4" => 3));
    
$srvOnto->addConcept("TestType""text5""", array("fld1" => 5"fld4" => 2));
} else {
    
//echo "Tests....";

    
$res $srvOnto->getConcept("TestType"2);
    echo 
testAssertEqual("getConcept1"$res["data"], "text1");
    
    
$res = array( 
            array(
"id" => 1"ab" => 2)
            );
    
$res $srvOnto->utilDBtoIDS($res,"id");
    echo 
testAssertEqual("utilDBtoIDS1"count($res), 1);
    echo 
testAssertEqual("utilDBtoIDS2"$res[0], 1);
    
    
$res $srvOnto->getConceptByData("TestType""text2");
    echo 
testAssertEqual("getConceptByData1", (int)$res["id"], 3);
    
    echo 
"<b>--- Find tests ---</b><br />";
    
$res $srvOnto->getConceptsByFieldIds("TestType", array("fld1" => 1));
    
$res $srvOnto->utilDBtoIDS($res"id");
    echo 
testAssertEqual("getConceptsByFieldIds1"implode(":",$res), "2");
    
    
$res $srvOnto->getConceptsByFieldIds("TestType", array("fld4" => 1), 01000"id""ASC");
    
$res $srvOnto->utilDBtoIDS($res"id");
    echo 
testAssertEqual("getConceptsByFieldIds2"implode(":",$res), "2:4");
    
    
$res $srvOnto->getConceptsByFieldIds("TestType", array("fld4" => 1), 01"id""ASC");
    
$res $srvOnto->utilDBtoIDS($res"id");
    echo 
testAssertEqual("getConceptsByFieldIds3Limit"implode(":",$res), "2");
    
    
$res $srvOnto->getConceptsByFieldIds("TestType", array("fld4" => 1), 11"id""ASC");
    
$res $srvOnto->utilDBtoIDS($res"id");
    echo 
testAssertEqual("getConceptsByFieldIds4Limit"implode(":",$res), "4");
}    
?>

Почему не используется PHPUnit?


Предварительно прочитайте здесь: http://phpprofi.ru/blogs/post/24

Мы считаем, что основным тестированием должно быть интеграционное, а не юнит-тестирование. (в идеале – системное, но это сложно)
(Юнит-тестирование покрывает очень малый объем реальных ситуаций и хорошо подходит для написания библиотек, предназначенных для изолированных окружений – но плохо подходит для написания тестирования систем, работающих в интеграции. Получается много кода для тестирования, и мало толка).

Никто не мешает вам самостоятельно писать PHPUnit-тесты для расширений, но самое интересное – это, то, работает ли расширение в рамках QS-системы. Собственно, это и тестируется (+ автоматически дается доступ к БД и другим сервисам, позволяя делать интеграционное и системное тестирование).