Что ж, у нашей системы есть множество зависимостей, но я попытаюсь резюмировать, что происходит, не раскрывая слишком много деталей.
Выполняется тестовая сборка в виде .dll. Многие из этих тестов вызывают API.
В проблемном методе есть 2 вызова API, на которых есть ожидание: один для записи записи в этот внешний интерфейс, а другой для извлечения всех записей и последующего чтения последнего в этом внешнем интерфейсе, оба через API. Тест просто проверяет, была ли запись последней записи успешной в сквозном контексте, поэтому есть и запись, и затем чтение.
Если мы выполним тест в Visual Studio, все будет работать как положено. Я также тестировал его вручную с помощью команды lining vstest.console.exe, и ожидаемые результаты также всегда получались.
Однако, когда дело доходит до задачи VS Test в VSTS, по какой-то причине она не работает. Мы пытались понять это, и в конце концов мы дошли до того, что распечатали список из части, «прочитанной». Оказывается, последней вставленной записи нет в извлеченных данных, но если мы проверим внешний интерфейс другим методом, мы подтвердим, что процесс записи действительно произошел. Что дает? Почему VSTest становится устаревшим набором записей?
Мы также заметили две вещи:
1.) Для пройденных тестов ни один из результатов Console.WriteLine не отображается в журналах. Только при неудачном тесте они это делают.
2.) Даже если наш вызов Data.Should.Be находится в самом конце TestMethod, журналы сообщают об ошибке ДО того, как он распечатает строки! И даже тогда печать должна произойти после чтения списка записей, но когда распечатки все же появляются, мы все еще пропускаем запись, которую мы только что написали.
Есть ли что-то вроде того, что нам здесь не хватает? Мне действительно кажется, что VSTS vstest выполняет утверждение перед фактическим кодом. Порядок TestMethods выполняется в правильном порядке (4-й тест, написанный сверху вниз в коде, выполняется с 4-го, а не с 4-го до последнего), и нам нужно, чтобы они выполнялись в правильном порядке, потому что некоторые из более поздних тестов зависят от предыдущие испытания успешны.
Что-то нам здесь не хватает? Я бы поставил исходный код, но если это так, мне нужно сначала очистить несколько вещей.