Назовите тесты носа как задачу scons.

Я хотел бы получить scons для вызова носовых тестов со списком каталогов. Каков был бы лучший способ сделать это?

2 ответа

Решение

Если вам нужно проанализировать код возврата внешнего приложения (например, если вы вызываете тесты), вам необходимо использовать модуль подпроцесса Command() + python. Если вы используете только команду, вы не можете получить код возврата приложения.

Например:

if 'test' in COMMAND_LINE_TARGETS:
    runTestsCmd = env.Command('runTests', None, Action(runTests, "Running tests"))
    AlwaysBuild(runTestsCmd)
    Alias('test', runTestsCmd)

Пример функции runTests:

def runTests(target = None, source = None, env = None) :
    # fill args
    retCode = subprocess.call(args, env = env['ENV'], cwd = cwd, shell = True)
    Exit(retCode)

Также вы можете установить дополнительные зависимости для runTestsCmd.

Depends(runTestsCmd, [appAndLibsToBuild])

Я не знаю фреймворка носа, но есть два способа выполнения внешних приложений с помощью SCons (есть другие способы сделать это с помощью Python, но не нужно упоминать их) следующим образом:

  • Execute() - всегда выполняется при анализе файлов SConscript
  • Command() - действует как цель и выполняется только в соответствии с ее зависимостями

Я думаю, вы захотите использовать опцию Command() для запуска модульных тестов только в случае изменения одной из связанных зависимостей.

Что касается списка каталогов, то вы можете использовать некоторые программы на Python, например:

dirs = ['dir1', 'dir2', 'dir3']
for dir in dirs:
   cmd = 'theScriptToExecute $SOURCE $TARGET'
   env.Command(target = 'whatever', source = dir, action = cmd)
Другие вопросы по тегам