gpt4 book ai didi

testing - 在每次测试运行之前清除 Cursive REPL 状态

转载 作者:行者123 更新时间:2023-11-28 20:13:25 25 4
gpt4 key购买 nike

总的来说,我对 Cursive 和 Clojure 不熟悉,在获得像样的 TDD 工作流程时遇到了一些困难。

我的问题是后续测试运行取决于 REPL 中的状态。例如,假设您有以下代码。

(def sayHello "hello")

(deftest test-repl-state
(testing "testing state in the repl"
(is (= "hello" sayHello))))

如果您使用“工具->REPL->在 REPL 中的当前 ns 中运行测试”来运行它,它将通过。

如果你再像这样重构代码

(def getGreeting "hello")

(deftest test-repl-state
(testing "testing state in the repl"
(is (= "hello" sayHello))))

如果你用“Tools->REPL->Run tests in current ns in REPL”运行它,它仍然会通过(因为 sayHello 的 def 仍然存在于 repl 中)。但是,测试应该会失败,因为代码当前处于失败状态(sayHello 未在代码中的任何位置定义)。

我试过在 REPL 窗口中切换“局部变量将被清除”按钮,但这似乎无法解决问题。

如果有办法在 REPL 之外运行测试(或在每次测试运行的新 REPL 中运行),我会接受它作为解决方案。

我只想让被测源码和测试结果一一对应

在此先感谢您的帮助。

最佳答案

是的,老了很烦def可用。我什至通常不创建测试(糟糕),但这在正常开发过程中让我很不爽。如果我创建一个函数,然后重命名它,然后更改它,然后不小心引用了第一个函数名称,我会得到奇怪的结果,因为它引用的是旧函数。我仍在寻找解决此问题的好方法,它不涉及终止和重新启动 REPL。

不过,对于您的特定情况,有几个简单但糟糕的解决方法:

  • 打开 IntelliJ 的终端(窗口左下角的按钮)并运行 lein test .这将执行项目的所有测试并报告结果。

  • 与上述类似,您可以在 IntelliJ 之外,在项目目录中打开命令窗口并运行 lein test ,它将运行所有找到的测试。

您还可以使用 lein test <ns here> 指定要测试的命名空间(例如 lein test beings-retry.core-test ),或使用 :only 命名空间中的特定测试(例如 lein test :only beings-retry.core-test/a-test ;其中 a-testdeftest )。不幸的是,这不会发生在 REPL 中,所以它会破坏工作流程。


如上所述,我所知道的唯一基于 REPL 的解决方法就是杀死 REPL:

  • “停止 REPL”(Ctrl+F2)
  • “重新连接”(Ctrl+F5)。

当然,这很慢,而且如果您经常这样做的话,这是一个糟糕的解决方案。我很想看看是否还有其他人有更好的解决方案。

关于testing - 在每次测试运行之前清除 Cursive REPL 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53267637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com