testing - 无限循环的clojure测试

标签 testing clojure

我想编写一个测试(使用 clojure.test)来验证某些示例代码不会导致无限循环。如果我正在测试的代码有问题并且确实会导致无限循环,我希望测试工具报告失败——而不是停止运行并永远循环。 (我假设一种不会溢出堆栈的无限循环。)

有什么办法吗?

最佳答案

虽然在一般情况下你当然不能这样做,但如果你有兴趣解决一个更简单的问题,比如“这个函数是否在最多五秒内完成执行?”那么你可以相对容易地做到这一点。参见,例如,test for the same thing在 Clojure 本身:

(defn sample [& args]
  0)

(deftest test-vars-apply-lazily
  (is (= 0 (deref (future (apply sample (range)))
                  1000 :timeout)))
  (is (= 0 (deref (future (apply #'sample (range)))
                  1000 :timeout))))

创建一个做你想做的事情的 future ,然后用超时取消引用那个 future 。

关于testing - 无限循环的clojure测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39212638/

相关文章:

clojure - 嵌入式 swank-clojure repl 可以访问它嵌入的程序吗?

testing - 是否可以在 Julia 中组织健全性检查,以便在加载包时轻松编译它们?

spring - Spring Cloud 合约gradle每次都运行测试

scala - 创建 TestActorRef 导致 NullPointerException

java - 使用 Java 对象作为 Clojure 映射

java - 在 Clojure 中使用 java 方法作为函数参数

testing - 如何测试 gRPC API?

linux - 如何测试内核以识别内核中可能导致内核崩溃的问题

multithreading - 为什么在另一个线程中循环大量数据会导致GC过度活跃,并阻止一些数据被释放?

matlab - 将多维元胞数组的生成从 Matlab 转换为 Clojure 的最佳方法是什么