NSubstitute Argument Matcher Ошибки только в сборке TFS

У меня возникла проблема, при которой тесты на моем локальном компьютере выполнялись с использованием Visual Studio, но они не пройдены, когда CI Build запустит их на моем сервере TFS.

Вот строка, которая терпит неудачу, и предыдущая строка для контекста.

var mockEventRepository = Substitute.For<IEventRepository>();
mockEventRepository.GetAll().ReturnsForAnyArgs(r => new List<Event>().AsQueryable());

Обратите внимание, что АРГУМЕНТОВ НЕ СООТВЕТСТВУЕТ Ни одного во всем тесте.

TFS выдаст ошибку:

NSubstitute.Exceptions.UnexpectedArgumentMatcherException: Сопоставители аргументов (Arg.Is, Arg.Any) должны использоваться только вместо аргументов членов. Не используйте в выражении Returns() или где-либо еще вне вызова участника.

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

Например... Это просто удалось после постановки в очередь следующей идентичной сборки после сбоя оригинальной. Однако в тот раз это не удалось, когда он попробовал ту же сборку с другой конфигурацией с другой, но похожей и ошибочной ошибкой:

NSubstitute.Exceptions.AmbiguousArgumentsException: Невозможно определить спецификации аргументов для использования.

К сведению, используя TFS 2015 и VS 2015.

2 ответа

Решение

Короче говоря, вся проблема была вызвана старым тестом, в котором было найдено совпадение Arg без использования NSubstitute.

Урок, который я усвоил здесь, заключается в том, что этот тип сценария может привести к очень неточным ошибкам, и я призываю любого, кто испытывает проблему, подобную этой, пересмотреть все случаи использования сопоставлений Arg.

Я видел эту проблему при использовании NSubstitute с xunit, который по умолчанию запускает тестовые классы параллельно. У NSubstitute должны быть проблемы с многопоточностью, потому что отключение распараллеливания исправило это для нас. В ваш тестовый проект AssemblyInfo.cs добавьте

[assembly: CollectionBehavior(DisableTestParallelization = true)]

/questions/41329562/vyipolnyat-yunit-testyi-posledovatelno-a-ne-parallelno/41329563#41329563

Другие вопросы по тегам