PHPUnit и многопроцессорное тестирование - PullRequest
1 голос
/ 21 февраля 2011

Я пишу библиотеку для выполнения мультиобработки (разветвления) и хотел бы проверить ее с помощью PHPUnit.

До сих пор я придумал следующий сценарий:

  • Создание тестируемого процесса для запуска как разветвленного процесса - так что, если что-то пойдет не так, основной процесс, где PHPUnitвыполнение не будет зависать вечно (я использую какое-то ограничение по времени, после которого тестируемый дочерний процесс уничтожается).
  • В тестируемом процессе и любых других созданных им подпроцессах я регистрирую все свои действиявыполнял работу, принимал и отправлял сигналы и т. д.) в каком-то отформатированном журнале, который впоследствии можно легко обработать
  • После того, как вся работа выполнена в основном процессе, где выполняется тестирование PHPUnit, я читаю иобработать созданные журналы и, по моим утверждениям, проверить, были ли выполнены ожидаемые действия.

Существуют ли какие-либо хорошие / лучшие методы проведения тестирования по сравнению с моим сценарием?

Ответы [ 2 ]

3 голосов
/ 29 июня 2012

Посмотрите, как я тестирую Spork .Ключ должен позвонить pcntl_wait() перед выполнением ваших утверждений.

2 голосов
/ 22 февраля 2011

Я рекомендую вам отделить проверку разветвления от проверки работы, проделанной в разветвленном процессе (ах). Например, допустим, что ваша программа рекурсивно обрабатывает каталог, порождая дочерний процесс для каждого подкаталога, а затем обрабатывает файлы в своем собственном каталоге.

Вместо полной обработки большого дерева каталогов и анализа результирующего вывода, созданного только для тестов, есть тесты для обработки файла, тесты для порождения дочернего элемента с каталогом, тест для каталогов. обнаружено и т. д.

Ваши тесты станут проще, когда вы уменьшите размер системы, которую каждый должен тестировать, до небольших единиц работы. Когда вы начнете тестировать, что потомки порождены, вы можете смоделировать системный вызов, если поместите его в свой собственный метод.

Это очень много охватывает на очень высоком уровне. Спросите, если вам нужна более подробная информация.

...