서브 리턴 값에 관해 나에게 명확하지 않은 무언가가 있습니다. 저는 서브 모듈별로 모듈을 테스트하고 케이스가 발생할 경우 올바른 반환 값을 출력하는지 아니면 올바른 예외가 발생하는지 확인하고 싶습니다. 예를 들어서브 루틴의 성공/실패를 평가하십시오
, 이제 나는 다음과 같은 코드가 있다고 가정 해 보자 (X는 :: 인수가 :: BadFormat 예외 예외에서 파생 된 핸들러 :: 클래스) : 테스트 파일에서
package My::Module;
use strict;
use warnings;
sub new{#does things unrelated to the current question}
sub my_sub {
my ($self,$possible_value) = @_;
if ($possible_value =~ q{\w}) { #Affect value to current object
$self->{field} = $possible_value;
}else{ #throw an exception
X::Argument::BadFormat->throw(
arg => 'possible_value',
expected_format => 'something that looks like a word',
received_value => $possible_value,
);
}
}
, 나는 테스트를 실행합니다 같은 :
my $object = My::Module->new();
throws_ok(sub {$object->my_sub('*')}, 'X::Argument::BadFormat', 'Faulty value will raise an exception');
ok($object->my_sub('turlututu'));
이 때 테스트하기 쉽습니다 : 보조가 값을 반환
- , 개
- 시험 조건은 그냥 현재 객체에서 필드의 값을 설정할 때
그러나, 나는 아무것도 반환 할 이유가 없다, 예외를 발생해야합니다. 이 경우
:- 코드의 간단한 실행이 충분이 "true"로 보조 출력을 평가하는 것입니다?
- 명시 적으로 "return 1;"을 추가해야합니까? ?
- sub가 실제로 마지막 평가를 반환합니까?이 경우 성공은 "if"에서
- 테스트의 성공입니까? 내가 생각하지 못했지만, 누구에게나 이 분명합니까?
왜 객체의 속성이 getter를 통해 직접 attr을 통해 올바르게 설정되었는지 확인하는 것이 좋을까요? 예 :'my $ p = 'blah'; $ obj-> my_sub ($ p); $ obj -> {field}, $ p, "my_sub()는 필드 attr을 ok로 설정합니다;" – stevieb
참으로. 나는 내 질문을 다르게 표현해야한다는 것을 알았다. 실제 문제는 필드 영향뿐만 아니라 서브 루틴이 값을 반환하지 않을 때마다 서브 루틴이 올바르게 종료되었는지 평가할 수있게하는 것입니다. 이게 더 명확한가요? –
오. 질문을 읽고, 나는 일반적인 대답과 같은 것은 없다는 것을 이해한다? 내 반환 값에 대해 명시 적이어야하거나 내 개체에 대해 수행해야하는 동작을 테스트해야합니다. –