标签: clojure-testing

Clojure-使用组件策略进行测试

我正在使用Stuart Sierra组件实现一个应用程序。如他在自述文件中所述:

采用一致的方式来设置和拆除与应用程序相关的所有状态,可以实现快速的开发周期,而无需重新启动JVM。由于创建和启动系统的成本很低,因此每个测试都可以创建系统的新实例,因此它还可以使单元测试更快,更独立。

这里首选的策略是什么?是类似于JUnit的oneTimeSetUp / oneTimeTearDown,还是真的在每个测试之间(类似于setUp / tearDown)?

如果在每个测试之间,是否有一种简单的方法来启动/停止所有测试(之前和之后)的系统,而不必每次都重复代码?

编辑:示例代码以显示我的意思

(defn test-component-lifecycle [f]
  (println "Setting up test-system")
  (let [s (system/new-test-system)]
    (f s) ;; I cannot pass an argument here ( https://github.com/clojure/clojure/blob/master/src/clj/clojure/test.clj#L718 ), so how can I pass a system in parameters of a test ?
    (println "Stopping test-system")
    (component/stop s)))

(use-fixtures :once test-component-lifecycle)
Run Code Online (Sandbox Code Playgroud)

注意:我在这里谈论的是单元测试。

testing unit-testing clojure clojure-testing

5
推荐指数
1
解决办法
443
查看次数

Clojure“是”声明未按预期工作

我正在为我的第一个Clojure项目编写测试用例。在这里,如果“:meat”的值为空,我希望测试失败:

(deftest order-sandwich
  (let [response {:meat "" :bread "yes" :add-on "lettuce"}]
    (is (= (:bread response) "yes"))
    (is (not (nil? (:meat response))))))
Run Code Online (Sandbox Code Playgroud)

但是我的测试运行成功(返回“ nil”)。

有人知道为什么会这样吗?有一个更好的方法吗?

我提前谢谢你!!

unit-testing functional-programming clojure clojure-testing

5
推荐指数
1
解决办法
81
查看次数

如何从“lein test”输出成功的测试?

使用 clojure.test,运行时lein test,默认设置仅打印断言数量,例如“运行了 12 个包含 19 个断言的测试”、失败测试的详细信息以及测试的命名空间。我还想要成功测试的输出,这样我就可以看到实际运行了哪些测试。像 JS 中的 Mocha 这样的框架默认就有这种行为。

例如,如果以下测试通过:

(deftest aTest
  (testing "Simple test"
      (is (= 1 1))))
Run Code Online (Sandbox Code Playgroud)

我想要一个类似的输出(格式是任意的):

Testing <namespace>
    Passed: aTest -> Simple test
Run Code Online (Sandbox Code Playgroud)

理想情况下,通过的测试也应该有颜色编码。

我查看了一些库,包括 lein-test-refresh 和 humane-test-output,但没有看到我需要的东西。另一个选项看起来像是重写 clojure.test 中的报告函数,但我想如果可能的话避免这种情况。

unit-testing clojure clojure-testing

5
推荐指数
1
解决办法
2004
查看次数