在Clojure中,deftest
是用于定义测试用例的宏,而with-redefs
是用于在测试中重新定义函数的宏。然而,将with-redefs
应用于deftest
周围可能会导致一些问题。
首先,deftest
宏会将测试用例封装在一个函数中,并在运行时动态地调用这个函数。而with-redefs
宏会在当前线程中重新定义函数,并在当前作用域中生效。因此,如果将with-redefs
应用于deftest
周围,重新定义的函数只会在deftest
宏展开时生效,而不会在测试运行时生效。这样会导致测试用例无法正确地使用重新定义的函数,从而产生错误的结果。
其次,deftest
宏会在测试运行时创建一个新的命名空间,并在其中定义测试用例函数。而with-redefs
宏会在当前命名空间中重新定义函数。如果将with-redefs
应用于deftest
周围,重新定义的函数会被定义在当前命名空间中,而不是测试用例所在的命名空间中。这样会导致测试用例无法访问重新定义的函数,从而无法正确执行测试。
因此,为了避免上述问题,不建议在deftest
周围应用with-redefs
。如果需要在测试中重新定义函数,可以在测试用例函数内部使用with-redefs
来重新定义函数,确保重新定义的函数在测试运行时生效,并且只在当前测试用例中生效。
腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云