Тестирование метода, предоставляемого автозагрузкой с Test :: More - PullRequest
2 голосов
/ 22 ноября 2011

У меня есть фабричный класс, который предоставляет несколько похожих методов с помощью автозагрузки.Для более длинного списка различных типов объектов он может делать такие вещи, как

Factory->objects();
Factory->object(23);
Factory->object(name => "foo");

Теперь я хочу написать тест для этого класса.Я начал с чего-то вроде этого:

use Test::More;

BEGIN { use_ok 'Factory' }

my $objects = Factory->objects;

# more tests following ...

Тест не проходит в строке с Factory->objects, поскольку он неявно проверяет, может ли Factory сделать objects().Я не мог найти документацию для этого.Но если я выполняю тот же вызов в не тестируемом скрипте, он работает отлично.

Как это проверить?

Обновление: ARGH, я только что узналпоместите все это в тест для класса модели Factory в моем приложении Catalyst.Ну, этот класс модели - это Адаптер для класса Factory в моей внешней модели (которую я на самом деле намеревался протестировать).Работа отлично подходит для самой модели.Еще хотелось бы узнать, как тестировать метод из адаптированного класса.Вот как выглядит класс адаптера:

package MyCatalystApp::Model::Factory;
use Moose;

extends 'Catalyst::Model';
extends 'Catalyst::Model::Adaptor';

__PACKAGE__->config(class => 'MyModel::Factory');

MyModel::Factory - это тот же класс, что и Factory в исходном вопросе.Я упустил разницу между Catalyst и моделью в первоначальном вопросе для упрощения.

Ответы [ 2 ]

0 голосов
/ 29 июня 2013

Catalyst создает экземпляры моделей (компонентов) во время setup_components, вызывая метод COMPONENT .Я предполагаю, что Catalyst :: Model :: Adapter полагается на это.

Когда вы use MyCatalystApp::Model::Factory, вы можете обойтись вызовом my $factory = MyCatalystApp::Model::Factory->COMPONENT() изнутри тестов вместо new(), чтобы заставить их работать.

0 голосов
/ 22 ноября 2011

Вы должны просто добавить "use Factory;" перед вызовом тестов (после use_ok).

...