Это старая версия Справка/QS/ExtTests за 2017-12-15 21:38:14..
Автоматические тесты для расширений
Начиная с версии 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), 0, 1000, "id", "ASC");
$res = $srvOnto->utilDBtoIDS($res, "id");
echo testAssertEqual("getConceptsByFieldIds2", implode(":",$res), "2:4");
$res = $srvOnto->getConceptsByFieldIds("TestType", array("fld4" => 1), 0, 1, "id", "ASC");
$res = $srvOnto->utilDBtoIDS($res, "id");
echo testAssertEqual("getConceptsByFieldIds3Limit", implode(":",$res), "2");
$res = $srvOnto->getConceptsByFieldIds("TestType", array("fld4" => 1), 1, 1, "id", "ASC");
$res = $srvOnto->utilDBtoIDS($res, "id");
echo testAssertEqual("getConceptsByFieldIds4Limit", implode(":",$res), "4");
}
?>
Почему не используется PHPUnit?
Предварительно прочитайте здесь: http://phpprofi.ru/blogs/post/24
Мы считаем, что основным тестированием должно быть системное, а не юнит-тестирование.
(Юнит-тестирование покрывает очень малый объем реальных ситуаций и хорошо подходит для написания библиотек, предназначенных для изолированных окружений – но плохо подходит для написания тестирования систем, работающих в интеграции. Получается много кода для тестирования, и мало толка).
Никто не мешает вам самостоятельно писать PHPUnit-тесты для расширений, но самое интересное – это, то, работает ли расширение в рамках QS-системы. Собственно, это и тестируется (+ автоматически дается доступ к БД и другим сервисам, позволяя делать интеграционное и системное тестирование).