수업에서 저는 SICP 과제를 해결하기 위해 이전 R5RS Scheme 표준을 사용하고 있습니다. 저는 첫 번째 개발 테스트를하고 싶습니다. 그래서 유닛 테스트 프레임 워크가 좋을 것 같았고 작은 테스트를 작성하기 위해 SchemeUnit을 선택했습니다.SchemeUnit에서 R5RS 코드를 사용할 수 있습니까?
출력 (문자열, 숫자 등)에서 프리미티브를 테스트하기 만하면되지만, 목록을 테스트 할 때로드 블록을 쳤습니다. 아마 테스트를 실행하는 데 사용되는 계획 방언의 차이 함께 할 수있는 뭔가가 :
foo.scm :(define a-list (list 2))
foo는-tests.scm 다음을 실행(check-equal? a-list (list 2))
결과 테스트 :
Unnamed test
FAILURE
name: check-equal?
location: tester.scm:22:3
actual: {2}
expected: (2)
테스트 스위트 실행되도록하려면, 나는 F의 상단에 "#lang scheme/base
를 추가해야 oo-tests.scm 및 require
구성표 패키지 foo.scm에서 상단에 #lang r5rs
과 (#%provide (all-defined))
이 있어야합니다.
나는 R5RS와 "scheme/base"에서 어떻게 든 다르게 구현되어 있다고 생각한다. 함께 일할 수있는 방법은 없나요? 그리고 왜 실패합니까 ({} 대())?
훌륭한 답변을 보내 주셔서 감사합니다. 필자는 "Planet"이 Java 세계에서 Maven과 같은 일종의 종속성 관리 응용 프로그램이라는 것을 이해합니다. 방금 구성표 단위뿐만 아니라 실제로 테스트를 실행하고 결과를 표시하기 위해 텍스트 러너가 필요합니다. (require (planet schematics/schemeunit : 3/text-ui))에 해당하는 (#require) 부분에 무엇을 추가할까요? – oligofren
현대적인 라켓에서는 단위 테스트 프레임 워크가 라켓의 표준 라이브러리와 함께 제공됩니다. 참조 : http://docs.racket-lang.org/rackunit/index.html. 실제로 '랙 유닛 (rackunit)'의 조상이기 때문에 PLaneT에서 사용하지 마십시오. 'check-equal? '것을 사용한다면 명시 적 테스트 러너가 필요하지 않습니다. 테스트 모듈을 실행하는 것만으로도 테스트를 수행 할 수 있습니다. 보다 정교한 테스트를 위해 명시적인 테스트 러너가 필요한 경우 나머지 http://docs.racket-lang.org/rackunit/quick-start.html을 참조하십시오. 그러나 r5rs에서 당신이하고있는 것에 대해, 나는 가치있는 복잡성을 보지 못합니다. – dyoo
감사합니다. 필요한 구문이 (# % require schemeunit/text-ui) 발견되었습니다. 그런 다음 #lang r5rs (# % 랙 유닛 필요) (# % rackunit/text-ui 필요) (# %는 "foo.scm"이 필요함)으로 변경하여 라켓의 내장으로 업그레이드했습니다. 테스트. 내가 원하는 것처럼 일하는 것 같아. 고마워. 이 정보를 답안에 추가하면 궁금합니다. – oligofren