2014-10-19 41 views
3

我想了解如何使用'-unittest'dmd开关来选择哪些文件执行了它们的unittests。关闭第三方代码的unittest执行

我有一个文件,“a.d”,包含unittest块。文件“a.d”从包含它们自己的单元测试块的第三方模块(需要文件“b1.d”,然后“b2.d”)导入。

我不想在第三方代码中运行测试:我只是想在a.d中运行测试。

如果我编译的第三方代码首先

dmd -c b1.d b2.d 

然后尝试将它与我同在

dmd -unittest a.d b1.o b2.o 

复制的单元测试代码链接然后我得到一个错误,指出在模块中b1.d哪个广告试图导入的文件是无法读取的文件。

任何人都可以告诉我如何做到这一点?

谢谢!

回答

2

你想要做什么,因为A.D拥有进口b1.db2.d是不可能的。这意味着这些模块必须传递给编译器。

如果你想将某些*的.o文件它更复杂的:你必须写一个接口(*为他们.di文件就像一个*。所以),因此这不是一个好主意使用此机制绕过单元测试。 (虽然这可能会有点重)。

任意选择一些单位测试的更直接的方法是使用特征getUnitTests。这真的是更多的路要走。

+0

不getUnitTests仍然依赖于使用-unittest开关,因此我仍然面临从b1.d和b2.d的所有单元测试编译? – beltsonata 2014-10-20 19:35:44

+0

它的确如此,但您可以编写一个函数来选择a.d中的测试并运行它们,我的意思是独家。查看文档中的示例。 – 2014-10-21 10:30:34

+0

你的问题是*关闭第三方*的单元测试**执行*不*关闭第三方*的单元测试**编译**。 – 2014-10-21 10:37:15

1

你快到了。只需使用单独的编译和链接步骤,即

dmd -c -unittest a.d 

然后:

dmd a.o b1.o b2.o 

就是这样。

+0

这不会编译,因为a.d从b1.d,从而导入b2.d进口。 – beltsonata 2014-10-20 19:29:48