Microsoft TestServer не выполняет запросы в задаче сборки NUnit / .Net Core для TFS 2018 - PullRequest
1 голос
/ 06 марта 2019

Я настроил несколько интеграционных тестов 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;
    }
}

Результаты теста Локально:

Resharper results

dotnet test results

Результаты испытаний по TFS:

Build task test TFS results

Одни и те же тесты выполняются локально с одной и той же командой, dotnet test, и для каждого интеграционного теста при запуске в задаче Build вместо InternalServerError вместоMethodNotAllowed.

Мне не хватает некоторых параметров конфигурации на сервере сборки?Агент должен быть настроен по-другому?У меня VS2017 Enterprise с последними обновлениями, и IIS включен по всем направлениям на сервере.Агент сборки не способен настроить TestHost, как моя локальная рабочая станция?В чем разница между тем, что я запускаю dotnet test локально, и агентом сборки, выполняющим ту же команду?

Любые подсказки к этой загадке очень ценятся.

...