Я настроил несколько интеграционных тестов API с помощью консольного приложения .NET Core 2.2 и NUnit 3. Проект API также использует .NET Core 2.2, и все настроено, построено и работает просто отлично.
Однако интеграционные тесты не работают при сборке в TFS 2018. Задача dotnet test
в сборке TFS отлично работает для всех моих модульных тестов, но любой тест, написанный с использованием библиотеки Microsoft.AspNetCore.TestHost.TestServer
, чтобы сделатьзапросы к API, сбои с 500
.
Контроллер API:
[Route("[controller]")]
public class AppController
{
[HttpPost("bootstrap"), ActionName(nameof(GetApplicationBootstrap))]
[ProducesResponseType(typeof(AppConfig), 200)]
[ProducesResponseType(401)]
public ActionResult<AppConfig> GetApplicationBootstrap()
{
return Ok(new AppConfig
{
IsAdministrator = true
});
}
}
Интеграционный тест:
public class TestFixtureBase
{
internal HttpClient Client;
internal TestServer Server;
[SetUp]
protected void SetUp()
{
Server = new TestServer(new WebHostBuilder().UseEnvironment("Development").UseStartup<TestServerStartup>());
Client = Server.CreateClient();
}
[Test]
public async Task Post_WhenCalled_ReturnsAppConfigModel_Ok()
{
//Arrange
var request = new HttpRequestMessage(new HttpMethod("POST"), "/app/bootstrap");
//Act
var result = await Client.SendAsync(request);
//Assert
Assert.True(result.IsSuccessStatusCode);
}
[TestCase("GET")]
[TestCase("PUT")]
[TestCase("DELETE")]
public async Task Get_WhenCalled_ReturnsAppConfigModel_Error(string method)
{
//Arrange
var request = new HttpRequestMessage(new HttpMethod(method), "/app/bootstrap");
//Act
var result = await Client.SendAsync(request);
//Assert
Assert.False(result.IsSuccessStatusCode);
Assert.AreEqual(HttpStatusCode.MethodNotAllowed, result.StatusCode);
}
[TearDown]
protected void TearDown()
{
Server = null;
Client = null;
}
}
Результаты теста Локально:
Результаты испытаний по TFS:
Одни и те же тесты выполняются локально с одной и той же командой, dotnet test
, и для каждого интеграционного теста при запуске в задаче Build вместо InternalServerError
вместоMethodNotAllowed
.
Мне не хватает некоторых параметров конфигурации на сервере сборки?Агент должен быть настроен по-другому?У меня VS2017 Enterprise с последними обновлениями, и IIS включен по всем направлениям на сервере.Агент сборки не способен настроить TestHost
, как моя локальная рабочая станция?В чем разница между тем, что я запускаю dotnet test
локально, и агентом сборки, выполняющим ту же команду?
Любые подсказки к этой загадке очень ценятся.