编辑:刚刚意识到您使用了common_test。此回复如不适用请忽略!
我有一种更高级的方法来测试未导出的函数,它的好处是不导出它们,从而尽可能保持生产代码完整(可能只有在某些函数未导出时才会出现错误,但是如果所有函数都导出,则在测试期间未检测到)。
这就是使用 Rebar 和 EUnit 的工作原理。
在您的源文件中,添加以下行:
-ifdef(TEST).
-include("yourmodule_tests.hrl").
-endif.
在您的test 文件夹中,添加一个名为yourmodule_tests.hrl 的文件(例如,与正常情况下的yourmodule_tests.erl 相反)并添加以下内容:
-include_lib("eunit/include/eunit.hrl").
some_test() ->
?assertEqual(ok, internal_function()).
将以下配置添加到rebar.config(如果您已经有erl_opts,只需将新元组添加到该列表中):
{erl_opts, [{i, "test"}]}.
当您运行rebar eunit 时,Rebar 将定义TEST 环境变量,您的代码将被“测试编译”。也就是说,将您的测试包含到您的模块中,并且测试将能够访问内部函数。
如果您使用 Rebar 以外的任何其他工具,请确保在编译测试时使用 erlc -DTEST ... 编译代码。