单元测试D库

Unit testing D library

内置单元测试功能(unittest {...} 代码块)似乎仅在 运行 时激活。

如何在没有 main 函数的库中激活单元测试?

这与 有点相关,尽管那里接受的答案是通过 main 函数处理变通方法。

例如,我希望单元测试在仅包含此代码的文件上失败:

int foo(int i) { return i + 1; }

unittest {
  assert(foo(1) == 1); // should fail
}

您会注意到我没有在顶部声明 module。我不确定这对这个特定问题是否重要,但实际上我会在顶部有一个 module 语句。

How can I activate unit tests in a library with no main function?

您可以使用 DMD 的 -main 开关或 rdmd 的 --main 开关,将一个空的 main 函数添加到已编译的源文件集。这允许为您的库创建单元测试二进制文件。

如果您使用 Dub,dub test 会自动执行上述操作。