Как я могу исправить тесты NUnit, которые успешны локально, но не работают в Jenkins? - PullRequest
0 голосов
/ 16 июня 2020

У меня есть модульный тест, который выполняется локально в Visual Studio и в командной строке, но он не работает, когда Дженкинс создает запрос на вытягивание .

Всего 29 тестов , но только один из них не работает, и я не могу найти причину, почему это происходит.

Метод для тестирования следующий:

RuleFor(url => url).Must(url => Uri.TryCreate(url, UriKind.Absolute, out Uri uriResult))
                .OnFailure((url) => throw new CustomException($"The URL {url} provided is not a valid URL"));

Модульный тест: Assert.Throws<CustomException>(() => _sut.Validate("/image.png"));

Ошибка: Expected CustomException but found null

Я запускаю . NET Core 3.1 на Windows, а тесты в Jenkins выполняются в Docker .

Похоже, проблема в том, что это удается только на Windows. Я пробовал на Ma c, но ничего не вышло: (

Ответы [ 3 ]

0 голосов
/ 16 июня 2020

Думаю, это не проблема Дженкинса. Я думаю, это проблема тестового случая.

Код _sut.validate может правильно сгенерировать URI.

Я предполагаю, что Jenkins внутренне преобразовывает URL-адрес, предоставленный для каждого контейнера (микросервиса), и правильно разрешает имя. Тестируемая система работает нормально и успешно создает URL-адрес.

Измените входной URL-адрес, и ваше приложение начнет выдавать ошибку.

0 голосов
/ 18 июня 2020

Причина в том, что локально работало нормально, потому что я был на windows. В docker контейнер не был контейнером windows, поэтому он распознал строку как абсолютный ЛОКАЛЬНЫЙ ПУТЬ, поскольку Uri также поддерживает пути.

В итоге я изменил модульный тест и добавил дополнительную проверку.

0 голосов
/ 16 июня 2020

Раньше у меня была проблема, похожая на вашу, и это было связано с порядком запуска тестов и тем, почему он успешен локально.

Убедитесь, что ваши тесты не зависят от других любым способом.

...