Куда я помещаю объекты, замороженные с помощью Storable, чтобы использовать их в качестве имитационного ввода в модульном тесте в Perl?

Я пишу модульный тест, где мне нужно смоделировать функцию, которая возвращает объект Class:: Std:: Storable. Не существует нормального способа их сериализации, используя Data:: Dumper и тому подобное. Вместо этого я могу сделать это следующим образом:

use Storable;
my $serialized = Storable::freeze($object);
#store to a file, database, or wherever, and retrieve later.
my $clone = Storable::thaw($serialized);

Так что в моем модульном тесте мне нужно будет смоделировать функцию, чтобы вернуть этот сохраненный объект, возможно, так:

{
  local *foo = sub { return Storable::thaw($serialized) };
  is(call_to_something_that_calls_foo('input'), $result_of_operation_on_object);
}

Это довольно ясно. Что причиняет мне боль, так это то, как сохранить этот сериализованный объект. Это очень похоже на двоичный файл, поэтому я не могу просто положить его в __DATA__ раздел, как я бы с SQL для временной базы данных sqlite дБ или некоторых других данных, которые могут быть помещены в объекты. Я мог бы положить его в файл и сохранить в моем тесте, но разве это хорошая идея?

Так куда же поместить этот замороженный сериализованный объект?


Таким образом, Google может проиндексировать этот вопрос на будущее: это фактически о SOAP::WSDL и Class:: Std:: Fast:: Storable.

2 ответа

Решение
  1. Поместите это в t/foo.t.data и использовать __FILE__ . '.data' как имя файла.

  2. base64-кодирует данные и размещает их после __DATA__,

Поместите это в t каталог, вместе с тестовыми исполняемыми файлами.

Другие вопросы по тегам