是否可以在不运行它们的情况下编译unittest并为特定模块显式运行unittest?

时间:2016-01-29 01:15:26

标签: d

我经常在开发API时在main函数中编写我的测试代码,但由于D已经集成了unittest,我想开始使用它们。

我目前的工作流程如下,我有一个脚本可以监视任何.d文件中的文件更改,如果脚本找到修改后的文件,它将运行dub build

问题是dub build似乎没有构建单元测试

module foo

struct Bar{..}

unittest{
...
// some syntax error here
...
}

如果我明确地运行dub test,它只会编译单元测试。但我不想同时运行和编译它们。

第二个问题是我希望能够为单个模块运行单元测试,例如

dub test module foo

这可能吗?

1 个答案:

答案 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