Куда я помещаю объекты, замороженные с помощью 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 ответа
Поместите это в
t/foo.t.data
и использовать__FILE__ . '.data'
как имя файла.base64-кодирует данные и размещает их после
__DATA__
,
Поместите это в t
каталог, вместе с тестовыми исполняемыми файлами.