Я пишу модуль perl, который взаимодействует с API, и я хотел бы написать для него набор тестов, прежде чем помещать на CPAN. Однако, поскольку этот модуль в основном является просто интерфейсом для API, для всех тестов потребуется действительный ключ API и пользователь. Очевидно, я не могу выпустить этот модуль с моим ключом API и именем пользователя в наборе тестов, так как же лучше всего справиться с чем-то подобным? Должен ли я просто протестировать локально, а затем разместить его на CPAN без тестов? Кто-нибудь сталкивался с этим раньше и придумал хорошее решение? Я знаю, что писать тесты — лучшая практика, поэтому я хотел бы сделать это, если смогу. Спасибо!
набор тестов perl для API
Ответы (3)
Почему бы не обернуть вызовы API в небольшие функции (например, функция НИЧЕГО не делает, кроме вызова API), а затем имитировать эти функции в своих тестах по мере необходимости, используя Test::MockObject
или что-то подобное?
Это было бы еще лучше, так как вы могли бы иметь тесты, которые проверяют разные результаты API (сбой, сбой аутентификации и т. д.).
Я четко указал в своей документации, что мой модуль бесполезен без ключа API, и использовал конструкции skip:{} Test::More, чтобы пропустить все тесты, если ключ отсутствует. Вы можете выбрать слишком bail_out вместо пропуска.
Просто убедитесь, что ваши документы объясняют, как передать ключ API модулю.
I22r-Translate
- person mob; 10.07.2013
Обычно я справляюсь с такими вещами, требуя переменную среды для запуска набора тестов. Переменная среды будет содержать полезную информацию (например, ключ API, имя хоста для подключения и т. д.).
Вот пример того, как вы можете справиться с подобными вещами из тестового файла. Мы используем это для дистрибутива MongoDB, чтобы проверить, есть ли доступный сервер для запуска:
BEGIN {
eval {
my $host = exists $ENV{MONGOD} ? $ENV{MONGOD} : 'localhost';
$conn = MongoDB::MongoClient->new( host => $host, ssl => $ENV{MONGO_SSL} );
};
if ( $@ ) {
plan skip_all => $@;
exit 0;
}
};
Все, что он делает, это пытается подключиться к хосту, указанному в переменной окружения MONGOD
(или к локальному хосту). Если это не удается, он пропускает все тесты и сообщает причину. Пропуски по-прежнему считаются безотказными, поэтому это не помешает установке модуля, если тестовый сервер недоступен.
У меня есть этот код в файле .pm, который я use
устанавливаю в каждый файл .t в дистрибутиве.