2010-05-14 4 views
8

현재 동료가 작성한 테스트 스위트를 리팩토링하고 있으므로 Test::Class[::Most]을 사용하려고합니다. 시작하자마자 코드를 조금씩 분해하기 위해 실제로 두 개의 Moose 역할을 사용할 수 있다고 생각했습니다. Test :: Class에서 Moose를 어떻게 사용할 수 있습니까?

Prototype mismatch: sub My::Test::Class::Base::blessed: none vs ($) at 
/usr/lib/perl5/vendor_perl/5.8.8/Sub/Exporter.pm line 896 

그래서 질문은 : 나는 Test::Class와 함께 Moose을 사용하고 그렇다면, 어떻게 내가이 같은 오류 메시지를 받고 있어요 - 그러나 그것은 아주 불가능 보인다?

추신 : 코드는 다음과 같이 진행됩니다

package My::Test::Class::Base; 
use Moose; 
use Test::Class::Most; 

with 'My::Cool::Role'; 

has attr => (...); 
+0

관련 항목 : [무스 오브젝트를 조롱하는 방법은 무엇입니까?] (http://stackoverflow.com/questions/1365578/how-can-i-mock-moose-objects) – Ether

+2

항상 Test :: Sweet가 있습니다. 무스 기반의 OO 테스팅 프레임 워크. (xUnit이 아니기 때문에 자체의 발명이 아닌 Moose의 기존 개념을 사용하기 때문입니다.) – jrockway

+0

우, T :: S는 깔끔하게 보입니다. 거기서 잘 했어. $ job에서 빠져 나가지는 않겠지 만 .... – darch

답변

12

테스트 :: 딥 (테스트를 통해로드 : 대부분의 테스트 :: 클래스 :: 최다 통해) 수출 다른 많은과 함께 자신의 blessed 아마도 그렇게해서는 안됩니다. 그것은 문서화되지 않았다. Moose는 또한보다 일반적인을 내보내고 있습니다. Scalar::Util::blessed이 꽤 일반적이므로 Test :: Deep은 다른 blessed을 수출해서는 안됩니다.

불행히도, 그것을 막을 수있는 좋은 방법이 없습니다. 나는 내 :: 시험 :: 클래스에 :: 자료는 다음과 같은 해킹을하는 게 좋을 것 :

package My::Test::Class::Base; 

# Test::Class::Most exports Test::Most exports Test::Deep which exports 
# an undocumented blessed() which clashes with Moose's blessed(). 
BEGIN { 
    require Test::Deep; 
    @Test::Deep::EXPORT = grep { $_ ne 'blessed' } @Test::Deep::EXPORT; 
} 

use Moose; 
use Test::Class::Most; 

Test::DeepTest::Most에 문제를보고.

+1

거의 3 년 전에보고 된 이래로이 문제를보고하는 것은 쓸만하지 않다고 생각합니다. https://rt.cpan.org/Public/Bug /Display.html?id=27699 해결해 주셔서 감사합니다. 버그 보고서에 내 의견을 추가하겠습니다. –

+1

Test :: Most에보고하십시오. Test :: Deep에서 모든 것을 내보낼 필요는 없습니다. – Schwern

+1

이미 완료되었습니다 : https://rt.cpan.org/Public/Bug/Display.html?id=57501 –

5

당신은 (예를 들어)를 통해 특정 수출 퀠치 수 있습니다

use Test::Deep '!blessed'; 
3

난 그냥 테스트 : 대부분의 업데이트 버전을 출시했습니다. 0.30을 설치하면이 문제가 해결됩니다. 이 페이지를 찾는

1

사람들은 또한 다양한 테스트 :: 클래스 무스 매시업 모듈에 대해 알고 관심을 가질 수 있습니다

이러한 리팩터링 중 일부는 필요합니다. 구문이 다양합니다. 어느 정도 찾기 - 바꾸기 만하면 빠르게 전환 할 수 있습니다.

+1

찾고있는 사람들을 위해, 나는 현재 [Test :: Class :: Moose on github]의 알파를 가지고 있습니다. (https://github.com/Ovid/test-class-moose). – Ovid

+0

Test :: Class :: Moose는 수년간 CPAN에 참여해 왔습니다. 내가 와야하고 그것을 언급해야했다. – Ovid

관련 문제