Я слышал о способности PHPUnit автоматически генерировать базовые тестовые файлы из этой статьи: http://www.sitepoint.com/advanced-phpunit-testing-annotations-and-mocking/
(Обратите внимание, что PHPUnit-skelgen теперь является отдельной утилитой от остальной части проекта PHPUnit, ее источник можно найти здесь: https://github.com/sebastianbergmann/phpunit-skeleton-generator)
Если я использую phpunit-skelgen в следующем фрагменте кода:
<?php
class TestClass {
/**
* @assert (1, 2) == 3
*/
function add($a, $b) {
return $a + $b;
}
}
?>
Запустив phpunit-skelgen generate-test TestClass
Меня приветствует следующий метод испытаний (наряду с обычным шаблоном phpunit):
/**
* Generated from @assert (1, 2) == 3.
*
* @covers TestClass::add
*/
public function testAdd()
{
$this->assertEquals(
3,
$this->object->add(1, 2)
);
}
Мой вопрос: возможно ли phpunit-skelgen создавать тесты для php-файла без классов в нем? Например, у меня есть довольно большой файл с несколькими глобальными функциями действий, для которого я бы хотел, чтобы phpunit-skelgen создавал тесты, но я не вижу способа сделать это без упаковки моего существующего кода в класс.
Редактировать: Это вывод, если я пытаюсь запустить phpunit-skelgen для файла php с функциями, но без класса:
theguy@workpc ~/Projects/PHPUnitSamples $ phpunit-skelgen generate-test noClass
phpunit-skelgen 2.0.1 by Sebastian Bergmann.[RuntimeException]
Could not find class "noClass" in "/home/perry/Projects/PHPUnitSamples/noClass.php".generate-test [--bootstrap="..."] class [class-source] [test-class] [test-source]
У кого-нибудь есть предложения?
Также я заметил, что недавняя документация по phpunit-skelgen крайне скудна. Кто-нибудь знает какие-нибудь хорошие учебники или руководства или что-то написанное с тех пор, как phpunit-skelgen был перенесен в отдельный проект?
Документация может быть недостаточной, но первая строка совершенно ясно о цели:
phpunit-skelgen — это инструмент, который может генерировать скелетные тестовые классы из производственного кода классы и наоборот.
(выделено)
Так что ответ таков: это невозможно.
Других решений пока нет …