2015-07-17 2 views
2

У меня есть файл содержимого в моем основном проекте, который находится на ~/bin/foo/FOO32.EXE, который иногда выпадает из исходного контроля (люди возились с .gitignore) ; это каждый раз нарушает нашу сборку.тесты сборки: проверьте, существует ли файл в другом проекте

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

Я хочу протестировать в своем тестовом проекте, что файл существует, но путь может изменить динамический на основе конфигурации сборки (мы создаем 32-разрядную версию и любую версию ЦП, что означает, что каталоги bin могут изменять бит)

Как я могу проверить, существует ли файл в моем встроенном проекте как часть единичного теста? Я ожидаю, что это будет что-то вроде этого:

[TestMethod] 
public void BbqExeExists() 
{ 
    var basePath = ??? some expression that gets the main project's app directory 
    var basefilePath = @"foo/FOO32.EXE"; 
    var fullPath = Path.Combine(basePath, basefilePath); 

    Assert.IsTrue(File.Exists(fullPath)); 
} 
+0

Не можете ли вы просто включить файл в проект и выполнить операцию сборки: нет, скопировать в вывод: всегда? Тестирование присутствия файла в модульных тестах обычно является болью, а также зависит от вашего тестового бегуна ... –

+0

@AlexeiLevenkov Проблема в том, что наши разработчики иногда выводят файл из репозитория, поэтому он удаляется (первый этап процесса сборки синхронизируется с Сделки рЕПО). Установка файла для копирования на вывод всегда не помогает, если его там нет. Я хочу отправить разработчика, который удалил файл nastygram за то, что он не обратил внимания, и определить, что сборка недействительна. –

+0

Может быть, событие с предварительной сборкой вместо единичного теста? https://dillieodigital.wordpress.com/2012/11/27/quick-tip-aborting-builds-in-visual-studio-based-on-file-contents/ –

ответ

2

В комментариях говоря: такие тесты действительно не принадлежат в коде тестового проекта блока я бы сказал. Однако его довольно легко достичь в самой msbuild. Поставьте цель, как это в проекте, который определяет, что ваш каталог выхода:

<Target Name="BbqExeExists" BeforeTargets="Build"> 
    <Error Condition="!Exists('$(TargetDir)/foo/FOO32.EXE')" Text="FRequired file missing"/> 
</Target> 

Из-за BeforeTargets атрибут он будет работать до остальной части сборки. Кроме того, я использовал TargetDir, который, как правило, идет на выполнение встроенных исполняемых файлов, хотя из вашего вопроса это не совсем ясно, если это тот, который вам нужен.

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