clojure – 检测leiningen测试模式

在运行时是否有一种不太脏的方法来检测代码是否是通过lein测试启动的?我只是想选择一个不同的redis数据库,因此像environ或使用不同资源文件这样的解决方案似乎有点矫枉过正.

例如,leiningen自动启用测试配置文件,但我还没有找到获取当前启用的配置文件列表的方法.

最佳答案 没有简单的方法可以做到这一点. lein.test和clojure.test都没有公开这些信息.即使您找到了一种方法来破解某些私有变量的lein测试或clojure.test并检查它以确定您的代码是否作为lein测试的一部分运行.

但是,它会有一个非常大的问题:您的生产代码需要测试库代码(例如clojure.test)或更糟糕的构建工具代码(lein测试插件代码).

您可以尝试在生产代码中定义此类配置var(动态或非动态),并使用fixture来在测试中进行设置.

最好的解决方案是根据外部变量(如系统属性或环境变量)动态配置应用程序(例如,使用建议的环境).这样,您可以根据需要配置多个不同的配置集(例如prod vs unit test vs integration test vs performance testing等),而不仅仅是两个(prod vs test).

点赞