Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在测试期间加载/删除clojure中的名称空间_Clojure_Namespaces - Fatal编程技术网

如何在测试期间加载/删除clojure中的名称空间

如何在测试期间加载/删除clojure中的名称空间,clojure,namespaces,Clojure,Namespaces,我正在开发一个在应用程序启动期间在源代码树中查找依赖项的库,我正在尝试编写一个集成测试来确保它正常工作。我的测试名称空间中有fixture文件,测试开始并顺利完成 为了确保测试不会影响将来的运行,我添加了一个“after”处理程序(在midje中),它使用remove ns删除测试夹具名称空间 在下一次加载时,测试失败,因为缺少名称空间 似乎remove ns不仅删除了名称空间,还使得以后无法使用require将其加载到同一个运行的VM中。我注意到remove ns上有一个“小心使用”的说明,没

我正在开发一个在应用程序启动期间在源代码树中查找依赖项的库,我正在尝试编写一个集成测试来确保它正常工作。我的测试名称空间中有fixture文件,测试开始并顺利完成

为了确保测试不会影响将来的运行,我添加了一个“after”处理程序(在midje中),它使用
remove ns
删除测试夹具名称空间

在下一次加载时,测试失败,因为缺少名称空间

似乎
remove ns
不仅删除了名称空间,还使得以后无法使用
require
将其加载到同一个运行的VM中。我注意到
remove ns
上有一个“小心使用”的说明,没有任何解释

我已经验证了手动运行
require
似乎确实无法重新加载已删除的命名空间:

 user=>(test.util.fixtures.A/f)
 {:item 1}
 user=> (remove-ns 'test.util.fixtures.A)
 #<Namespace test.util.fixtures.A>
 user=> (test.util.fixtures.A/f)
 ClassNotFoundException test.util.fixtures.A  
 user=> (require 'test.util.fixtures.A)
 nil
 user=> (test.util.fixtures.A/f)
 ClassNotFoundException test.util.fixtures.A  
user=>(test.util.fixtures.A/f)
{:项目1}
user=>(删除ns的test.util.fixtures.A)
#
user=>(test.util.fixtures.A/f)
ClassNotFoundException test.util.fixtures.A
user=>(需要'test.util.fixtures.A]
无
user=>(test.util.fixtures.A/f)
ClassNotFoundException test.util.fixtures.A

有人知道为什么会发生这种情况吗?

我通过源代码进行了跟踪,结果它需要调用load libs,然后调用load lib,然后检查全局原子(该行是
加载的(包含?@*加载的libs*lib)

进一步阅读,似乎一旦加载了某些内容,就可以为库加载器指定
:reload
选项。现在我记得看到了
:reload
,所以解决方案是将
:reload
放入require:

 user=> (require 'test.util.fixtures.A :reload)
 nil
 user=> (test.util.fixtures.A/f)
 {:item 1}

我跟踪了源代码,结果它需要调用load libs,load lib又调用load lib,load lib又检查全局原子(该行是
加载的(包含@loaded libs*lib)

进一步阅读,似乎一旦加载了某些内容,就可以为库加载器指定
:reload
选项。现在我记得看到了
:reload
,所以解决方案是将
:reload
放入require:

 user=> (require 'test.util.fixtures.A :reload)
 nil
 user=> (test.util.fixtures.A/f)
 {:item 1}

我跟踪了源代码,结果它需要调用load libs,load lib又调用load lib,load lib又检查全局原子(该行是
加载的(包含@loaded libs*lib)

进一步阅读,似乎一旦加载了某些内容,就可以为库加载器指定
:reload
选项。现在我记得看到了
:reload
,所以解决方案是将
:reload
放入require:

 user=> (require 'test.util.fixtures.A :reload)
 nil
 user=> (test.util.fixtures.A/f)
 {:item 1}

我跟踪了源代码,结果它需要调用load libs,load lib又调用load lib,load lib又检查全局原子(该行是
加载的(包含@loaded libs*lib)

进一步阅读,似乎一旦加载了某些内容,就可以为库加载器指定
:reload
选项。现在我记得看到了
:reload
,所以解决方案是将
:reload
放入require:

 user=> (require 'test.util.fixtures.A :reload)
 nil
 user=> (test.util.fixtures.A/f)
 {:item 1}