Clojure:如何全局启用规范断言?
我想使用clojure规范来检查我的函数的输入(至少在开发期间)。到目前为止,我已经做了以下工作:我已经定义了规范,在函数的开始部分,我提出了如下示例中的断言:Clojure:如何全局启用规范断言?,clojure,clojure.spec,Clojure,Clojure.spec,我想使用clojure规范来检查我的函数的输入(至少在开发期间)。到目前为止,我已经做了以下工作:我已经定义了规范,在函数的开始部分,我提出了如下示例中的断言: (defn foo [bar] (s/assert ::bar bar) (do-something-with bar)) 其中s是clojure.spec.alpha的别名。默认情况下,这些断言似乎被禁用(在使用midje运行单元测试时)。我可以通过将(s/check asserts true)放入我的一个文件中来启用它们。
(defn foo [bar]
(s/assert ::bar bar)
(do-something-with bar))
其中s
是clojure.spec.alpha
的别名。默认情况下,这些断言似乎被禁用(在使用midje运行单元测试时)。我可以通过将(s/check asserts true)
放入我的一个文件中来启用它们。不过,我不确定这个设置的范围是什么。我觉得把它简单地放进一个源文件是不对的,尽管到目前为止它似乎对我有用
建议在测试期间全局启用这些断言,但在部署应用程序时禁用它们的方法是什么?调用此函数是全局启用规范的正确方法。如果您希望为所有测试全局启用它,我会将它放在所有测试所需的全局测试帮助文件的顶部。还有系统属性
clojure.spec.check-asserts
,您可以将其设置为true。这用于设置断言检查的初始值。
请参见如何设置这样的系统属性?我找不到任何好消息。这与Java系统属性是一样的吗?是的,它与命令行上的标准Java
-D
是一样的。我仍然不明白在运行leiningen测试时如何设置系统属性。命令如<代码> Lein Mije-DCuljur.Sq.Cuq-AsSts= Trase< /Cord>似乎不起作用。如前所述,如果您这样做,您可以考虑调用<代码>检查断言< /代码>函数。例如,我们对所有指定的函数进行如下插入::profiles{:test{:injections[(要求'[chestration.spec.test:as stest])(stest/instrument)(.println System/err“Instrumented specs”)]}
我无法启用具有系统属性的断言,但是在注入成功的情况下调用检查断言
:注入[(要求'[clojure.spec.alpha:as s])(s/check断言true)]