то, как php's объявляет (отмечает) действительно работу?

я создал сигнал, обрабатывающий класс с помощью pcntl_signal, который теперь я хочу использовать для sigalrm

проблема, которую я имею, состоит в том, что мой тест phpunit для тестирования работ signalclass (где я только использую, объявляют галочки в signalclass), но testclass для тестирования класса аварийного сигнала, который не делает в свою очередь использование signalclass, если я добавляю, объявляют (ticks=1) в моем alarmtests это также, работает

я думал, объявляют, что галочки только необходимы в коде обработки сигнала, который в моем случае находится в signalclass? но насколько я вижу, что также необходимо для кода, кто называет код обработки сигнала, это даже не работает в моем alarmclass, я должен поместить его в свой alarmtest класс!?

хотя использование strace сигнал поставляется независимое от галочек

таким образом, кто-либо понимает, почему я должен использовать, объявляют () в моих тестах (иногда)? или почему я должен объявить (ticks=1) также в коде, который использует его? это означало бы, что пользователь должен знать, как использовать, объявляют

6
задан Infinite Recursion 18 June 2014 в 15:40
поделиться

1 ответ

Для использования тиков в глобальном масштабе необходимо иметь их в начале вызывающего скрипта. Вероятно, поэтому вы должны заново объявить его. Я не могу сказать наверняка, не зная ваш код. Ниже приведены некоторые примеры, которые работают с юнит-тестированием.

Вы можете объявить тики в вашем коде IIRC следующей конструкцией

function tick_function() {
    // Do something
}

register_tick_function('tick_function');

declare (ticks=1) {
    // Your code here
}

Или в качестве рабочего примера

function profile_memory()
{
     echo '<!--' . memory_get_usage() . '-->';
}

register_tick_function('profile_memory');
declare (ticks=1)
{
     $pass = md5('qwerty'); /* Tick executed */
     $pass = strrev($pass);  /* Tick executed */
     echo $pass;  /* Tick executed */
}

Это рабочий пример самодостаточной тиковой функции, которая работает в рамках юнит-теста

class TickTest {
    private function profile_memory() {
        static $i;
        ++$i;
        echo "Tick $i\n";
    }
    public function  __construct() {
    }
    public function doTicks() {
        $register_tick_function = register_tick_function(
                array($this,'profile_memory')
            );
        declare (ticks=1) {
            $pass = md5('qwerty'); /* Tick executed */
            $pass = strrev($pass);  /* Tick executed */
        }
    }
}

И это юнит-тест (и да, я знаю, что это не настоящий тест).

require_once 'PHPUnit/Framework.php';
require_once dirname(__FILE__).'/../ticks.php';
class TickTestTest extends PHPUnit_Framework_TestCase {
    protected $object;
    protected function setUp() {
        $this->object = new TickTest;
    }
    protected function tearDown() {
    }
    public function testDoTicks() {
        $this->object->doTicks();
    }
}

Глядя на выходные данные, тиковая функция вызывается при выполнении юнит-теста.

Некоторые ссылки

6
ответ дан 17 December 2019 в 02:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: