내가이 얼마나 강력한 모른다 (이. 테스트는 위의 방법에 의해 비참하게 부족한 것이 분명해야한다)하지만, 여기에 위생 깨는 매크로를 사용하여 솔루션입니다. (대니 나를 생각 :) 어쩌면 당신은 그의 충고를 따르도록 할 것보다 똑똑하다.)
파일 f1.rkt
:
#lang racket
(define (f x) (displayln "f1's f") (+ x 1))
(define (g x) (displayln "f1's g") (+ x 2))
(require "f-tests.rkt")
(tests)
파일 f2.rkt
:
#lang racket
(define (f x) (displayln "f2's f") (+ 1 x))
(define (g x) (displayln "f2's g") (+ 2 x))
(require "f-tests.rkt")
(tests)
파일 f-tests.rkt
:
#lang racket
(provide tests)
(define-syntax (tests stx)
(syntax-case stx()
[(_)
(datum->syntax
stx
'(begin
(require rackunit)
(check-equal? (f 10) 11)
(check-equal? (g 20) 22)))]))
datum->syntax
tests
매크로는 stx
의 컨텍스트에서 식별자를 사용해야합니다. 즉, 매크로가 인 경우이 호출됩니다. 일반적으로 매크로는 이 정의 된 시간에 식별자를 사용합니다 ().f1.rkt
또는 f2.rkt
파일을 실행하면 테스트가 실행됩니다. (인쇄물은 올바른 기능이 호출되었음을 증명하기위한 것입니다.)