Azure Ошибка теста Devops Pipeline: неверный путь к файлам данных - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть РЕПО, содержащее три решения. Каждое решение имеет несколько проектов, многие из которых являются общими (включая тестовые проекты).

У меня есть конвейер сборки по следующим линиям

  • Извлечение пакетов NuGet
  • Build Solution 1
  • Build Solution 2
  • Build Solution 3
  • Выполнить все тесты

Выполнить все тесты следующим образом:

- task: VSTest@2
  displayName: 'Test'
  inputs:
    testSelector: 'testAssemblies'
    testAssemblyVer2: |
      **\*test*.dll
      !**\*TestAdapter.dll
      !**\obj\**
    searchFolder: '$(System.DefaultWorkingDirectory)'

Подавляющее большинство тестов работают отлично. Тем не менее, я получаю странное и довольно запутанное сообщение об ошибке для некоторых тестов:

[ошибка] Ошибка SetUp для тестового устройства TestProjectOne.ABGetSomethingTests

[ошибка] SetUp: System.IO. DirectoryNotFoundException: не удалось найти часть пути 'd: \ a \ 1 \ s \ Projects \ TestProjectTwo \ A \ B \ TestData \ SomeFile.txt'.

Так что в настоящее время он обрабатывает TestProjectOne , но затем он говорит, что не может найти файл по пути для TestProjectTwo .

Код в тесте выглядит следующим образом:

private const string RelativePath = @"..\..\A\B\TestData\";
...
var x = File.ReadAllText(RelativePath + "SomeFile.txt")

Само собой разумеется, что это прекрасно работает с использованием Visual Studio 2019 с использованием тестеров Visual Studio и ReSharper.

Почему конвейер Azure DevOps страдает от этой проблемы?

1 Ответ

1 голос
/ 25 февраля 2020

Почему конвейер Azure DevOps страдает от этой проблемы?

Это потому, что мы используем подстановочный знак в тестовом задании VS:

- task: VSTest@2
  displayName: 'Test'
  inputs:
    testSelector: 'testAssemblies'
    testAssemblyVer2: |
      **\*test*.dll

Что захватит все *test*.dll файлы в папке $(System.DefaultWorkingDirectory), включая подпапку.

Очевидно, что этот метод очень удобен тем, что нам не нужно извлекать *test*.dll из папки один за другим , Но одна проблема с ним заключается в том, что, поскольку мы используем подстановочные знаки, он потеряет полный путь к каждому *test*.dll файлу . В этом случае, если мы укажем относительный путь ..\..\A\B\TestData\ в файле *test*.dll, он не получит правильный путь, поскольку текущий файл *test*.dll потерял полный путь.

Это причина, почему он выполняет тестовую DLL из TestProjectOne.A.B.GetSomethingTests, но получает путь от TestProjectTwo.

Чтобы решить эту проблему, мы можем указать полный путь в файле *test*.dll вместо относительного пути.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...