2014-10-19 3 views
3

Я пытаюсь понять, как использовать «-unittest» dmd-переключатель, чтобы выбрать, какие файлы исполняются unittests.Отключение unittest выполнения стороннего кода

У меня есть файл «a.d», содержащий блок unittest. Файл «a.d» импортируется из стороннего модуля (требуется файл «b1.d» и, в свою очередь, «b2.d»), который содержит свои собственные блоки unittest.

Я не хочу запускать тесты в стороннем коде: я просто хочу запустить тесты в a.d.

Если я скомпилировать код третьей стороной первого

dmd -c b1.d b2.d 

затем попытаться связать его с моим кодом с UnitTests скопированного в

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

тогда я получаю сообщение об ошибке сказав, что модуль b1.d, которое пытается импортировать объявление, находится в файле, который нельзя прочитать.

Может ли кто-нибудь показать мне, как это сделать?

Спасибо!

ответ

2

То, что вы хотите сделать, это не представляется возможным, потому что a.d импортировала b1.d и b2.d. Это означает, что эти модули должны быть переданы компилятору.

Если вы хотите, чтобы связать некоторые * .o файлы это сложнее: нужно написать интерфейс (* .di файл для них так же, как для * .so), таким образом, это не очень хорошая идея используйте этот механизм, чтобы обойти unittests. (хотя это может работать, это немного тяжело).

Более простой способ произвольного выбора некоторых unittests - использовать черту getUnitTests. Это действительно больше путь.

+0

Не работает getUnitTests от использования переключателя -unittest, поэтому я все еще сталкиваюсь с компиляцией во всех unittests из b1.d и b2.d? – beltsonata

+0

Он делает, но вы можете написать функцию для выбора тестов в a.d и запускать их, я имею в виду исключительно. Посмотрите пример в документации. –

+0

Ваш Q - * Отключение unittest ** выполнение ** стороннего * не * Отключение unittest ** компиляция ** стороннего *. –

1

Вы почти находитесь. Просто используйте отдельную компиляцию и компоновку шагов, т.е.

dmd -c -unittest a.d 

, а затем:

dmd a.o b1.o b2.o 

Вот и все.

+0

Это не компилируется, потому что a.d импортирует из b1.d, который, в свою очередь, импортирует b2.d. – beltsonata

Смежные вопросы