Тест контроллера не работает только на сервере

Итак, я создал модульные тесты для ApiController, и один из них дает сбой только на сервере в конвейере CI с исключением System.InvalidOperationException : HttpControllerContext.Configuration must not be null.

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

public IHttpActionResult MyControllerMethod()
{
  if(this.SomeThings()) // uses this.IService and this.IService2
    return this.UnAuthorized();

  DoOtherStuff();
  return this.Ok();
}

В моем тесте я имитирую IService и IService2 и передаю их контроллеру:

var controllerUnderTest = new MyController(serviceMock, serviceMock2);

Затем я вызываю метод с некоторыми неверными данными, провоцируя возврат UnAuthorized():

var result = await controllerUnderTest.MyControllerMethod(invalidData).ExecuteAsync(CancellationToken.None);`

Сначала это не удалось. Поэтому я добавил

controllerUnderTest.Configuration = new HttpConfiguration();
controllerUnderTest.Request = new HttpRequestMessage();

из этого сообщения Stackoverflow.

Итак, теперь это работает. Локально. Работает при отладке, работает с помощью testrunner от ReSharper, работает с NCrunch.

Но это не работает в конвейере.
При выполнении в конвейере с использованием консольного инструмента ncrunch тесты завершаются с ошибкой с указанным выше сообщением.

Есть идеи, как это исправить? Как config может быть нулевым, когда я его явно инициализирую?

Изменить: вот трассировка стека:

System.InvalidOperationException : HttpControllerContext.Configuration must not be null.
bei System.Web.Http.Results.ExceptionResult.ApiControllerDependencyProvider.EnsureResolved()
bei System.Web.Http.Results.ExceptionResult.ApiControllerDependencyProvider.get_IncludeErrorDetail()
bei System.Web.Http.Results.ExceptionResult.Execute()
bei System.Web.Http.Results.ExceptionResult.ExecuteAsync(CancellationToken cancellationToken) 

person Squirrelkiller    schedule 01.07.2020    source источник
comment
Как config может быть нулевым, если я его явно инициализирую? - не должно. Вы уверены, что ваш конвейер работает с самым последним кодом?   -  person CodeCaster    schedule 01.07.2020
comment
Я - он запускается каждый раз, когда я нажимаю изменения. Я пробовал с помощью инициализатора объекта или без него, ничего не устанавливая или устанавливая только запрос. Это gitlab ci runner, он клонирует заново для каждого пайплайна.   -  person Squirrelkiller    schedule 01.07.2020