2014-10-29 96 views
5

我有一个模块,我正在写单元测试用于运行travis.ci。如何为未导出的函数编写单元测试?

在我的模块中,我对Web服务执行HTTP POST操作。

我的内部唯一函数之一validate_http_response()是我创建的用于封装Web服务调用的函数的一部分,所以我想测试它。但是,因为没有这样的export validate_http_response的功能不能“看到”我的测试脚本,我得到的错误:

validate_http_response not defined 

我应该如何架构我的测试,这样我就不必复制将内部函数粘贴到测试本身(有几个)?我想阻止必须同时维护srctest脚本。



编辑随着接受的答案我也发现我可以做以下的测试脚本的开头:include("../src/myfunctions.jl"),正如我在src每个文件单独测试脚本。

回答

8

再次检查模块上的documentation以更好地了解命名空间的工作原理。在Julia中没有强制可见性,因此您可以通过完全限定引用来访问任何模块中的函数,导出或未导出。所以在你的情况下,如果你的模块被命名为HTTP,你可以说HTTP.validate_http_response访问你未导出的函数来测试。

+1

完全限定参考绝对是朱利安方式来处理这个问题。 – IainDunning 2014-10-29 14:04:42

+0

作品。我发现它最后更容易做到:'include(“../ src/myfunctions.jl”)'所以我不必一直引用它。懒惰的输入。 – 2014-10-30 10:12:49

0

有两种soltutions:

  1. 导出功能。
  2. 创建一个包含HTTP请求验证码的新模块。在那里移动功能。现在它是官方/公共API的一部分,可以独立测试。

第一个解决方案很简单,但会污染您的API。第二个是干净的,但可能很多工作。

相关问题