ARACOOOL
@ARACOOOL
PHP Developer

Как протестировать код который работает с shell командами?

Как протестировать классы и методы которые используют такой метод?
protected function exec()
    {
        $descriptorSpec = array(
            0 => array('pipe', 'r'),
            1 => array('pipe', 'w'),
            2 => array('pipe', 'a')
        );

        Response::addRecord('Command: ' . $this->getCommand());
        $process = proc_open($this->getCommand(), $descriptorSpec, $pipes, $this->directory);
        if (is_resource($process)) {
            Response::addRecord('Response: ' . stream_get_contents($pipes[1]));
            fclose($pipes[1]);

            return proc_close($process);
        }

        return false;
    }
  • Вопрос задан
  • 313 просмотров
Пригласить эксперта
Ответы на вопрос 2
Denormalization
@Denormalization
Я бы сделал обертку для работы с proc_open\proc_close\etc...
Тогда можно просто замокать эту обертку, и протестить только логику.
Ответ написан
EvilsInterrupt
@EvilsInterrupt
System programming, Reversing Engineering, C++
Ну вот Вы сами и сформулировали ответ на свой вопрос. Попробую пояснить. Модульный тест, хороший тест, обладает качеством: его просто написать! Даже вопроса не возникнет, о том, а как написать-то? Если же написать сложно, то Вы, возможно, пытаетесь написать тест на код в котором выполняется более чем одна задача!

Сейчас вижу, что у Вас в методе выполнется минимум два не связанных между собою действия:
1. Создание дескриптора
2. Выполнение какого-то действия с применением этого дескриптора

Их надо тестировать по отдельности! Для действия №1 Вы можете написать тесты:
1. Позитивный: это когда 0, 1, 2
2. Негативный: когда меньше нул или больше 2

Для действия №2: Вы тоже можете написать минимум два теста с правильным и не правильным дескриптором
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 22:48
100 руб./за проект
19 апр. 2024, в 20:43
20000 руб./за проект