在我正在採用的課程中,我們使用Scheme的舊R5RS標準來解決SICP作業。我喜歡測試第一個開發,所以我認爲單元測試框架會很好,我選擇SchemeUnit來編寫小測試。可能使R5RS代碼與SchemeUnit一起使用?
迄今爲止,這隻能測試輸出中的原語(字符串,數字......),但在嘗試測試列表時遇到了路障。它有可能是與該計劃方言差異用於運行測試:
foo.scm:(define a-list (list 2))
富-tests.scm:在運行時(check-equal? a-list (list 2))
結果測試:
Unnamed test
FAILURE
name: check-equal?
location: tester.scm:22:3
actual: {2}
expected: (2)
爲了使測試套件運行,我要補充"#lang scheme/base
到F的頂部oo-tests.scm和require
這個schemeunit包。在foo.scm中,我需要頂部有#lang r5rs
和(#%provide (all-defined))
。
我猜想列表在R5RS和「scheme/base」中有不同的實現方式。任何方式讓他們一起工作?爲什麼它失敗({} vs())?
謝謝你的回答。我將「Planet」理解爲某種依賴管理應用程序(如Java世界中的Maven)。除了計劃單元之外,我還需要一個文本運行器來實際運行測試並顯示結果。我將添加到(#require)部分中,相當於 (require(planet schematics/schemeunit:3/text-ui))? – oligofren 2013-02-17 21:18:34
在現代的Racket中,知道單元測試框架現在與Racket的標準庫一起提供。請參閱:http://docs.racket-lang.org/rackunit/index.html。不要使用PLaneT中的那個,因爲它實際上是'rackunit'的祖先。如果你使用'check-equal?'的東西,你不需要顯式的測試運行器:只要運行測試模塊就足以驅動測試。如果您確實需要顯式測試運行器(用於更復雜的測試),請參閱http://docs.racket-lang.org/rackunit/quick-start.html的其餘部分。但是對於你在r5rs中做的事情,我並不認爲值得它的複雜性。 – dyoo 2013-02-17 21:24:41
謝謝。發現所需的語法是(#%require schemeunit/text-ui)。然後我通過更改爲 #lang r5rs (#%require rackunit) (#%require rackunit/text-ui) (#%require「foo.scm」)並定義一個最小值測試。似乎像我想要的那樣工作。非常感謝。介意我是否將這些信息添加到您的答案中? – oligofren 2013-02-17 21:51:57