2014-10-19 43 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