2009-12-08 33 views

回答

7

从阅读在JUnit测试参数文章似乎一旦你过去的poiler板参数的最酷的部分是,它可以让你输入:

 return Arrays.asList(new Object[][] { 
      { 2, true }, 
      { 6, false }, 
      { 19, true }, 
      { 22, false } 

轻易地定义四个测试。

测试是等效(无锅炉板代码需要)宏are

(are [n prime?] (= prime? (is-prime n)) 
    3 true 
    8 false) 

如果你想给你的输入作为一个地图,那么你可以运行类似:

(dorun (map #(is (= %2 (is-prime %1)) 
      { 3 true, 8 false})) 

虽然are宏会产生更容易的读取输出。

2

不知道我理解参数化测试的重点,但我会为此使用动态绑定。

user> (def *test-data* [0 1 2 3 4 5]) 
#'user/*test-data* 

user> (deftest foo 
     (doseq [x *test-data*] 
      (is (< x 4)))) 
#'user/foo 
user> (run-tests) 

Testing user 

FAIL in (foo) (NO_SOURCE_FILE:1) 
expected: (< x 4) 
    actual: (not (< 4 4)) 

FAIL in (foo) (NO_SOURCE_FILE:1) 
expected: (< x 4) 
    actual: (not (< 5 4)) 

Ran 1 tests containing 6 assertions. 
2 failures, 0 errors. 
nil 

user> (defn run-tests-with-data [data] 
     (binding [*test-data* data] (run-tests))) 
#'user/run-tests-with-data 

user> (run-tests-with-data [0 1 2 3]) 

Testing user 

Ran 1 tests containing 4 assertions. 
0 failures, 0 errors. 
nil 

你可以重写deftestrun-tests自己。这可能是十几行Clojure让测试接受其他方式的参数。