我经常在开发API时在main函数中编写我的测试代码,但由于D已经集成了unittest,我想开始使用它们。
我目前的工作流程如下,我有一个脚本可以监视任何.d文件中的文件更改,如果脚本找到修改后的文件,它将运行dub build
问题是dub build
似乎没有构建单元测试
module foo
struct Bar{..}
unittest{
...
// some syntax error here
...
}
如果我明确地运行dub test
,它只会编译单元测试。但我不想同时运行和编译它们。
第二个问题是我希望能够为单个模块运行单元测试,例如
dub test module foo
这可能吗?
答案 0 :(得分:1)
您可以使用特征getUnittests编制自定义测试运行器。
getUnitTests
采用一个参数,一个聚合的符号(例如struct / class / module)。结果是该聚合的所有单元测试函数的元组。返回的函数就像普通的嵌套静态函数一样,CTFE可以工作,UDA也可以访问。
在你的main()
中你应该能够写出一些带有任意数量模块的东西:
void runModuleTests(Modules...)()
{
static if (Modules.length > 1)
runModuleTests!(Modules[1..$]);
else static if (Modules.length == 1)
foreach(test; __traits(getUnitTests, Modules[0])) test;
}
当然必须将开关-unittest
传递给dmd