Некоторые юнит-тесты падают в Azure, но проходят локально (C#, Asp.Net)
В нашем проекте есть сервис, который генерирует PDF-документы. Итак, у нас есть тесты, которые проверяют, равны ли два документа. Первый документ, называемый "Expected", мы уже имеем локально в качестве шаблонного документа. Второй документ, называемый "Actual" или "Result", генерируется автоматически нашим сервисом. Вот код:
[TestMethod]
public void PdfExportProviderTest()
{
var document = GetDocument("Pdf document");
IExportProvider pdfExportProvider = new PDFExportProvider();
var stream = pdfExportProvider.Export(document, DisplayUnits.Imperial);
var resultPdf = Encoding.UTF8.GetString(stream.ToArray());
var expectedPdf = GetPdfByName("ExpectedDocument.pdf");
Assert.IsTrue(Clear(expectedPdf).Equals(Clear(resultPdf), StringComparison.InvariantCulture));
}
(Метод Clear удаляет всю случайно или динамически сгенерированную информацию из PDF (например, информацию о создании, идентификатор и т.д.) Как вы можете видеть, мы конвертируем наши PDF-файлы в две строки UTF-8 и сравниваем их. Все тесты успешно проходят локально. Но когда мы запускаем их на Azure, Azure Pipeline генерирует отчет, где некоторые из тестов PDF (не все!) не прошли. То, что я уже пробовал:
- Приводил результат и фактическую строку к одной кодировке (UTF-8).
- Удалял скрытые символы с помощью этого выражения: Regex.Replace(text.Trim(), @"[^\u0009\u000A\u000D\u0020-\u007E]", "*");
- Я сгенерировал файлы з различиями, чтобы проверить, что не так в Azure, и когда я получил эти сгенерированые файлы, я вижу, что строки, которые должны быть не равны, по факту - равны, хотя мой метод по логике выводит только те строки, которые отличаются (т.е. не равны), остальные он пропускает и не записывает в файл разницы.
- Я установил второй параметр "StringComparison.CurrentCulter" в методе Equals.
- Все файлы .cs имеют кодировку UTF-8.
Ничего из выше написанного не помогло. Надеюсь на помощь! Спасибо за ответ!
Ответы (1 шт):
Всем спасибо за помощь! Проблема была в том, что на Ажуре генерировались ПДФ-файлы и при просмотре файлов в текстовом режиме, я установил, что после каждой строчки добавлялся символ перехода на новую строку с кодом 13 (Carriage Return). После того, как я почистил эти символы, всё заработало!