издевательство над perl есть ли способ издеваться над $?

#perl #unit-testing #mocking

#perl #модульное тестирование #издевательство

Вопрос:

Я использую Test::MockModule для тестирования модуля perl. Один из вызовов требует проверки состояния $? , чтобы получить код ошибки, и программа проверяет его.

Как я могу издеваться над результатом $?

Тестируемый код выглядит так, как показано ниже.

 my $result = CCUtil::cleartool($cmd);

if ( $? != 0 ) {
    confess  "Stream $stream not found( $result) ";
}
 

API возвращает строку и устанавливает $? для проверки состояния.

Обычные вызовы методов и их возвращаемые значения изменяются, используя что-то вроде приведенного ниже

 my $module = Test::MockModule->new('CCUtil');
$mockModule->mock(cleartool => sub {return 'stream not found'});
 

Вызов метода теперь издевается. Не значение — $?

Ответ №1:

 my $module = Test::MockModule->new('CCUtil');
$mockModule->mock(cleartool => sub { $? = 0x0100; return 'stream not found' });