2011-11-22 1 views
2

autoload를 사용하여 유사한 메서드를 제공하는 팩토리 클래스가 있습니다. 다른 개체 유형의 긴 목록이 지금은이 클래스에 대한 테스트를 작성하려는Test :: More를 사용하여 autoload에서 제공하는 메서드 테스트

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

등의 작업을 수행 할 수 있습니다. Factoryobjects()을 할 수있는 경우는 암시 적으로 확인하기 때문에

use Test::More; 

BEGIN { use_ok 'Factory' } 

my $objects = Factory->objects; 

# more tests following ... 

시험은 Factory->objects으로 라인에 실패 :이 같은 시작했다. 나는 이것에 대한 몇 가지 문서를 찾을 수 없었다. 그러나 비 테스트 스크립트에서 동일한 호출을 실행하면 완벽하게 작동합니다.

테스트 방법?

업데이트 : ARGH, 나는이 모든 것을 Catalyst 응용 프로그램에서 Factory 모델 클래스의 테스트에 적용한 것으로 알고 있습니다. 글쎄,이 모델 클래스는 내 외부 모델의 Factory 클래스입니다 (실제로 테스트하려고했습니다). 모델 자체에 완벽하게 작동합니다. 적응 된 클래스에서 메소드를 테스트하는 방법을 아는 것이 좋습니다. 이 어댑터 클래스는 같은 모습입니다 :

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

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

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

MyModel::Factory이 원래의 질문에 Factory와 같은 클래스입니다. 단순화를 위해 원래의 질문에서 촉매와 모델의 차이점을 건너 뛰었습니다.

답변

0

시험을 호출하기 전에 (use_ok) 단순히 "use Factory;"을 추가해야합니다.

+0

참고로, 나는 작동 할 것이라고 확신하지만 Test :: More의 제한적이지만 사소하지 않은 지식을 기반으로, useLok이 AutoLoader와 잘 맞지 않는 이유를 알아낼 수 없다. 더 많은 단서를 가진 사람 (Schwern?)이 좀 더 명확한 대답을 추가 할 수 있기를 바랍니다. – DVK

+0

테스트를 거쳤으며 제대로 작동하지 않았습니다. ATM 문제를 재현하기 위해 간단한 예제 코드를 작성하려고합니다. –

+0

이제 테스트가 진행되고 조언이 전혀 도움이되지 않습니다. –

0

Catalyst는 COMPONENT 메서드를 호출하여 setup_components 중에 모델 (구성 요소)을 인스턴스화합니다. 나는 Catalyst :: Model :: Adapter가 이런 일을 의지한다고 생각한다.

use MyCatalystApp::Model::Factory으로 전화하면 을 new() 대신 테스트 내에서 호출하여 문제를 해결할 수 있습니다.

관련 문제