Clojure 检测leiningen测试模式
是否有一种不太脏的方法可以在运行时检测代码是否以Clojure 检测leiningen测试模式,clojure,leiningen,Clojure,Leiningen,是否有一种不太脏的方法可以在运行时检测代码是否以lein test启动?我只想选择一个不同的redis数据库,所以像environ或使用不同的资源文件这样的解决方案似乎有点过头了 例如,leiningen自动启用测试配置文件,但我还没有找到一种方法来获取当前启用的配置文件列表。没有简单的方法可以做到这一点。无论是lein.test还是clojure.test都不会公开此类信息。即使您找到了一种方法来侵入lein test或clojure.test的某些私有变量,并检查它以确定您的代码是否作为le
lein test
启动?我只想选择一个不同的redis数据库,所以像environ或使用不同的资源文件这样的解决方案似乎有点过头了
例如,leiningen自动启用测试配置文件,但我还没有找到一种方法来获取当前启用的配置文件列表。没有简单的方法可以做到这一点。无论是
lein.test
还是clojure.test
都不会公开此类信息。即使您找到了一种方法来侵入lein test或clojure.test的某些私有变量,并检查它以确定您的代码是否作为lein test的一部分运行
然而,这将有一个非常大的问题:您的生产代码需要要求测试库代码(例如clojure.test
),或者更糟糕的是,您的构建工具代码(lein test
插件代码)
您可以尝试在生产代码中定义这样的配置变量(动态或非动态),并使用fixture在测试中进行设置
最好的解决方案是根据外部变量(如系统属性或环境变量)动态配置应用程序(例如,使用建议的environ
)。通过这种方式,您可以根据需要拥有任意多个不同的配置集(例如,产品与单元测试、集成测试与性能测试等等),而不仅仅是两个配置集(产品与测试)。这可能看起来有些过分,但例如,组件就是为这样的确切用例而发明的。或者一般的依赖注入
我知道这种感觉,这只是一个私人项目,不需要困难的东西等。这就是为什么我把自己的模板放在一起,这样我就可以开始运行lein new…
这是我规避“只想选择不同的redis数据库”用例的解决方案
编辑它是一个web框架的模板:但是这些部分中有很多不是web开发人员特有的,尤其是组件部分:
还有一个集成测试,我特别使用了测试组件:我找到了一种方法。在“env/{test | prod | test}/config.clj”文件中设置一个var:
然后您可以读取该值:
(require '[cprop.source :as source])
(str "from-system-props: >> " (:lein-profile (source/from-system-props)))
其他选项是在系统道具中搜索键“:conf”:
:conf "test-config.edn"
因为配置文件会根据配置文件进行更改 -也许是第二个答案?看起来环境是一个不错的选择。这个模板在github上吗?:-)即使是针对你的,有更多的例子供他人学习也是很好的
:conf "test-config.edn"