2013-07-09 2 views
5

API와 인터페이스하는 perl 모듈을 작성 중이므로 CPAN에 올려 놓기 전에 테스트 스위트를 작성하고 싶습니다. 그러나이 모듈은 기본적으로 API 용 인터페이스이기 때문에 모든 테스트에는 유효한 API 키와 사용자가 필요합니다. 분명히이 모듈을 테스트 스위트의 API 키와 사용자 이름으로 공개 할 수 없으므로 이와 같은 것을 처리하는 가장 좋은 방법은 무엇일까요? 그냥 로컬에서 테스트하고 CPAN에 테스트없이 넣어야합니까? 누구든지이 문제에 뛰어 들어 좋은 해결책을 찾았습니까? 나는 필기 시험이 모범 사례라는 것을 알고 있습니다. 그렇게 할 수 있다면 시험을하고 싶습니다. 감사!API 용 펄 테스트 스위트

+0

키 메커니즘을 테스트하기 위해 키 또는 가짜 키가 필요없는 가짜 API를 작성하고 배포 할 수 있습니다. 진짜를 가진 사람들을위한 환경 변수를 통해 실제 api와 바꿀 수 있습니다. – KeepCalmAndCarryOn

+0

@KeepCalmAndCarryOn - 내 대답을 참조하십시오 :) – DVK

답변

4

API 호출을 작은 함수 (예 : NOTHING이 아니라 API 호출)로 포장 한 다음 Test::MockObject 또는 그 유사 물을 사용하여 필요에 따라 테스트에서 해당 함수를 모의 해보지 않는 이유는 무엇입니까?

당신이 API는 다른 결과를 테스트 테스트를 가질 수있을 것 같은이, 더 나은 것 (실패, 인증 실패, 등 ...)

+1

메모 : 이것은 분명히 많은 해결책이다. 테스트를 건너 뛰는 것이 더 좋지만 "유닛 테스트를위한 테스트를 조롱하지 말고 비 API 호출 코드의 100 % + 사용자가 통합 테스트 케이스에 대해 자신의 키와 사용자를 제공하도록하십시오" – DVK

+0

이 대답도 좋습니다. API 반환 값을 수행하는 비트를 테스트 할 수 있습니다. –

3

필자의 문서에서 API 키가 없으면 모듈이 쓸모가 없다는 것을 분명히했고 키가 없으면 Test :: More 구문을 건너 뛰고 모든 테스트를 건너 뛰었습니다. 건너 뛰기 대신 bail_out을 선택할 수도 있습니다.

문서에서 API 키를 모듈에 전달하는 방법을 설명했는지 확인하십시오.

+0

예를 들어 볼 수 있도록 모듈의 이름을 알려주시겠습니까? – srchulo

+0

예. 그것을 찾아 볼 시간을주세요. 나는 2 년 넘게 그것을 연구하지 않았다 :-) –

+0

https://metacpan.org/release/VendorAPI-2Checkout-Client –

2

내가 이런 종류의 물건을 처리하는 일반적인 방법이다 테스트 스위트를 실행하려면 환경 변수가 필요합니다. 환경 변수에는 유용한 정보 (예 : API 키, 연결할 호스트 이름 등)가 포함됩니다.

다음은 테스트 파일 내에서 이러한 종류의 문제를 처리하는 방법의 예입니다. 우리는에 대해 실행 가능한 서버가 있는지 확인하기 위해 MongoDB 배포이 사용

BEGIN { 
    eval { 
     my $host = exists $ENV{MONGOD} ? $ENV{MONGOD} : 'localhost'; 
     $conn = MongoDB::MongoClient->new(host => $host, ssl => $ENV{MONGO_SSL}); 
    }; 

    if ([email protected]) { 
     plan skip_all => [email protected]; 
     exit 0; 
    } 
}; 

모든이가 할 수있는 경우 MONGOD 환경 변수에 지정된 (또는 다른 로컬 호스트.) 호스트에 연결을 시도입니다 않습니다 't, 그것은 모든 테스트를 건너 뛰고 그 이유를 알려줍니다. 스킵은 여전히 ​​비 실패로 간주되므로 테스트 서버를 사용할 수없는 경우 모듈 설치를 방해하지 않습니다.

이 코드는 배포본의 .t 파일에 모두 use 인 .pm 파일에 있습니다.

+0

이것은 좋은 대답입니다. –