Положение
Возможно, я не использую PHPUnit в его традиционном смысле. Я использую PHPUnit с Selenium 2. У нас была идея записать действия, которые Selenium выполняет в виде «шагов по воспроизведению». Это означает, что если мы называем Selenium «click» или «type», действие записывается. Если действие не выполняется, оно также записывается. Мы не вызываем утверждения для действий типа установки. Например, если мы тестируем страницу для просмотра информации о клиенте, но прежде чем мы сможем добраться до этой страницы, нам нужно войти в систему, мы не утверждаем действия входа в систему, а утверждаем только последнюю часть, когда нам нужно просмотреть информация для клиентов.
Теперь, когда мы наконец сделаем утверждение, мы также хотим записать результат. Мы создали пользовательский слушатель для захвата результата. Проблема, которую мы имеем сейчас, состоит в том, как отправить результат обратно в наш регистратор действий.
Первоначально я запускал тест PHPUnit следующим образом:
class SandboxTest extends PHPUnit_Framework_TestCase { /* tests */ }
$stepTracker = new QA_StepTracker(); // Our custom action recorder
$suite = new PHPUnit_Framework_TestSuite();
$listener = new QA_Listener(); // Our customer listener
$listener->setStepTracker($stepTracker); // Passing the action recorder object to our customer listener
$result = new PHPUnit_Framework_TestResult();
$suite->addTestSuite('SandboxTest');
$result->addListener($listener);
$suite->run($result);
Это работает так, как я ожидал, хотя мне кажется, что запускать его таким образом я теряю множество функций, которые может предложить команда phpunit
. Я хочу вернуться к использованию команды phpunit
и использовать файл конфигурации phpunit.xml
для определения пользовательского прослушивателя.
Проверяя документацию PHPUnit, я заметил, что вы можете передавать параметры, когда определяете прослушиватель клиента в phpunit.xml
.
<listeners>
<listener class="MyListener" file="/optional/path/to/MyListener.php">
<arguments>
<array>
<element key="0">
<string>Sebastian</string>
</element>
</array>
<integer>22</integer>
<string>April</string>
<double>19.78</double>
<null/>
<object class="stdClass"/>
</arguments>
</listener>
</listeners>
эквивалентно
$listener = new MyListener(
array('Sebastian'),
22,
'April',
19.78,
NULL,
new stdClass
);
Согласно примеру, похоже, что я мог передать объект ... но это был бы недавно созданный объект, а не существующий ранее.
Кроме того, если бы мы использовали приведенный выше пример, мы бы избавились от setStepTracker()
в нашем прослушивателе клиента и передавали объект записи действия через прослушиватель клиента __construct()
Вопрос
Можно ли вообще передать переменную через пользовательский прослушиватель через phpunit.xml
?
Мы также определяем загрузчик для инициализации регистратора действий.
Если нет, то лучший ли способ действий сделает объект регистратора действий глобальным в начальной загрузке и обеспечит ли пользовательский слушатель доступ к нему таким образом?