2016-11-18 14 views
0

치킨 계획 버전 4.9.0.1을 사용 중이며 단위 테스트 패키지 srfi-64를 사용하여 단위 테스트 슈트에서 작업하고 있습니다.치킨 계획 srfi-64 테스트 오류 문제

이 단위 테스트 패키지에서 테스트 오류가 발생했습니다.

문제의 최소한의 예 : 보고서에

 
(require-extension srfi-64) 
(test-begin "error testing") 
(define (exn-tester) 
    (error "What does srfi-64 want?")) 
(test-error "the exn-tester" 'exn (exn-tester)) 
(test-end) 

결과 :

%%%% Starting test error testing 
Group begin: error testing 
Test begin: 
    test-name: "the exn-tester" 
Test end: 
    result-kind: fail 
    actual-error: #<condition: (exn)> 
    expected-error: exn 
Group end: error testing 
# of unexpected failures 1 

내가 이를 표현하는 방법을 알고하지 않기 때문에 문제는 내 테스트 오류에 명확하게 테스트 오류가 이해할 수있는 형태의 예외. 나열된 실제 오류에 대해 에 여러 변형을 시도했지만 성공하지 못했습니다.

특히, 오류 메시지 의 예상 오류를 어떻게 코드해야합니까?

(require-extension srfi-64) 
(test-begin "error testing") 
(define (exn-tester) 
    (error "What does srfi-64 want?")) 
(test-error "the exn-tester" (condition-predicate 'exn) (exn-tester)) 
(test-end) 

에서, 닭 지역 사회에 유의하시기 바랍니다 :

답변

0

SRFI 사양 자체는 기본적으로 "이 구현에 의존이다"하지만 보인다 코드를 살펴 후, 당신은 단순히 그것을 술어를 전달할 수 있습니다 말한다 test egg은 사실 테스트 달걀입니다. 그러나 현재 특정 예외 유형을 테스트 할 수있는 방법이 없습니다. 다음과 같이

(define-syntax test-error* 
    (syntax-rules() 
    ((_ ?msg (?error-type ...) ?expr) 
    (let-syntax ((expression: 
        (syntax-rules() 
        ((_ ?expr) 
        (condition-case (begin ?expr "<no error thrown>") 
            ((?error-type ...) '(?error-type ...)) 
            (exn() (##sys#slot exn 1))))))) 
     (test ?msg '(?error-type ...) (expression: ?expr)))) 
    ((_ ?msg ?error-type ?expr) 
    (test-error* ?msg (?error-type) ?expr)) 
    ((_ ?error-type ?expr) 
    (test-error* (sprintf "~S" '?expr) ?error-type ?expr)))) 

을 사용하려면 :

(test-error* "Result value error for out of bounds row" 
       (exn postgresql bounds) 
       (value-at (query conn "SELECT NULL") 0 1)) 

(exn postgresql bounds) 복합 조건을 수용 할 수있는 테스트를 알려줍니다 (자세한 정보를 원하시면 SRFI-12 참조) 나는 한 번 포스트 그레스 계란의 테스트 스위트에 대한이 매크로를 썼다 exn, postgresqlbounds의 유형 중 하나입니다. 다른 유형도있을 수 있지만이 예에서는 테스트가 통과하기 위해이 세 가지가 있어야합니다. 당신의 팁

+0

완전하고 유익한 답장을 보내 주셔서 감사합니다. –

0

다음은 충분히 잘 작동합니다 ": EXN 언 바운드 변수"를 정의하는 구문은 결과 사용

(require-extension test) 

test-begin "error-testing") 
(define (exn-tester) 
    (error "What does srfi-64 want?")) 
(test-error (exn-tester)) 
(test-end "error-testing") 

시도합니다. 아마도 이것을 사용하려면 추가 확장이 필요합니까?

그러나 define-syntax는 향후주의를 요합니다. 나는 Scheme을 시작하기 만하고, 테스트 중심의 배경을 가지고 있으며, 가장 좋은 코드에 관심이 많습니다.

+0

hm, 아마도 정의에 버그가 있습니다. 실패한 전체 코드를 붙여 넣을 수 있습니까? – sjamaan