В Azure DevOps у меня есть организация с двумя проектами .NET: «MyProject» и «MyProject.Tests». Оба проекта относятся к одному и тому же решению. Я создаю конвейер, и файл YAML находится в «MyProject». Приведенный ниже фрагмент кода из этого файла YAML предназначен для создания «MyProject», а затем запуска тестов из «MyProject.Tests».
jobs:
- job: Build and Test
displayName: Build and Test
steps:
- task: DotNetCoreCLI@2
inputs:
command: 'build'
projects: '**/MyProject.csproj'
- task: DotNetCoreCLI@2
inputs:
command: 'test'
projects: '**/MyProject.Tests.csproj'
Задача сборки (DotNetCoreCLI@2 с командой сборки) отлично работает для «MyProject.csproj», но задача тестирования (DotNetCoreCLI@2 с командой тестирования) не может найти «MyProject.Tests.csproj» (я знаю, что '**/ MyProject.Tests.csproj» — неправильный путь). Как я могу изменить свой файл YAML, чтобы он правильно ссылался и запускал модульные тесты из «MyProject.Tests.csproj» после создания «MyProject.csproj»?
Дополнительные детали:
@quyentho, спасибо за совет. файлы .sln и YAML размещаются на одном уровне в проекте MyProject. там есть путь к тестовому проекту, который выглядит следующим образом: ..\MyProject.Tests\MyProject.Tests.csproj, но на самом деле он не работает. какие-либо предложения?
Вы пытались удалить директиву project
? потому что команда dotnet test
будет использовать csproj/sln для поиска csproject, необходимого для запуска сборки и тестов.
@ StanSm789 StanSm789 Вы можете попробовать просмотреть файлы в исходном каталоге и проверить, можно ли найти тестовый файл. См. ответ ниже. Если это по-прежнему не работает, вы можете поделиться снимком экрана со структурой файлов проекта (тестовый проект и мой проект) и поделиться с нами дополнительным сообщением об ошибке. Будет полезно изучить этот вопрос подробнее.
@quyentho, хотя команда dotnet test работает локально, при запуске конвейера без директивы проекта у меня возникает следующая ошибка: ##[ошибка]Ошибка: процесс «C:\Program Files\dotnet\dotnet.exe» завершился с ошибкой с кодом завершения 1 ##[предупреждение]Файлы с результатами теста не найдены.
@ StanSm789 StanSm789 Директива проекта необходима при использовании тестовой задачи dotnet. Или он не найдет правильный файл тестового проекта для запуска теста. Вам необходимо убедиться, что MyProject.Tests.csproj можно найти с помощью тестовой задачи dotnet.
В Azure DevOps Pipeline все файлы проекта будут извлечены в исходную папку: $(Build.sourcesdirectory)
по умолчанию.
Чтобы убедиться, что MyProject.Tests.csproj можно найти правильно, вы можете указать следующий путь к тестовой задаче dotnet. projects: '$(build.sourcesdirectory)/**/MyProject.Tests.csproj'
Например:
jobs:
- job: Build and Test
displayName: Build and Test
steps:
- task: DotNetCoreCLI@2
inputs:
command: 'build'
projects: '**/MyProject.csproj'
- task: DotNetCoreCLI@2
inputs:
command: 'test'
projects: '$(build.sourcesdirectory)/**/MyProject.Tests.csproj'
Он просмотрит все файлы в исходной папке, чтобы найти соответствующие файлы.
Обновлять:
Судя по вашим снимкам экрана о структуре файлов проекта, MyProject и MyProject.tests взяты из двух репозиториев.
Чтобы использовать файлы в конвейере, вам необходимо добавить ресурсы репозитория в конвейер Azure.
Затем вам нужно извлечь два репозитория в Azure Pipeline. Затем вы найдете соответствующие файлы csproj.
Например:
resources:
repositories:
- repository: MyProjectTests
type: git
name: YourProjectName/MyProject.Tests
jobs:
- job: Build and Test
displayName: Build and Test
steps:
- checkout: self
- checkout: MyProjectTests
- task: DotNetCoreCLI@2
inputs:
command: 'build'
projects: '$(build.sourcesdirectory)/**/MyProject.csproj'
- task: DotNetCoreCLI@2
inputs:
command: 'test'
projects: '$(build.sourcesdirectory)/**/MyProject.Tests.csproj'
Спасибо за ваш совет! Я добавил projects: '$(build.sourcesdirectory)/**/MyProject.Tests.csproj'
Несмотря на то, что выходные данные конвейера указывают на успешное завершение, просмотрев выходные данные задачи, я обнаружил следующее предупреждающее сообщение: ##[warning]Project file(s) matching the specified pattern were not found.
Чтобы предоставить больше контекста, структура MyProject на корневом уровне включает типичные папки MVC, а также MyProject.sln, MyProject.csproj, appsettings.json и связанные файлы. В MyProject.Tests вы найдете папки, содержащие модульные тесты, такие как «Контроллеры», «Модели» и файл MyProject.Tests.cs. Пожалуйста, сообщите о дальнейших шагах по правильной настройке конвейера для идентификации и выполнения модульных тестов, расположенных в MyProject.Tests.
@ StanSm789 StanSm789 Вы имеете в виду, что в папке MyProject.Tests нет файла csproj?
Можете ли вы успешно запустить проект на своем локальном компьютере?
У MyProject.Tests есть файл .csproj. Кроме того, я могу успешно запустить проект на локальном компьютере, используяCtr
l + R
- T
или нажав кнопку Run All Tests
.
@ StanSm789 StanSm789 Если возможно, можете ли вы отредактировать свой вопрос, чтобы поделиться снимком экрана со всей структурой файлов проекта. Я не могу четко понять конкретное место, просто описав его.
готово, я добавил скриншоты к своему вопросу
@ StanSm789 StanSm789 На скриншоте видно, что эти два проекта взяты из двух репозиториев. Вам необходимо использовать ресурсы репозитория в Azure Pipeline для извлечения двух репозиториев. Затем вы можете определить путь к файлу. Для получения более подробной информации обратитесь к обновлению в моем ответе выше.
Почему бы вам не разместить файл yaml вне обоих проектов рядом с файлом .sln. Тогда вам даже не потребуется указывать директиву
project
или просто широкую карточку**/*.csproj
для обоих случаев.