Пошаговая автоматизация в интеграционном тесте с приложением ASP.Net - PullRequest
0 голосов
/ 03 сентября 2018

Я новичок в интеграционном тестировании с системой xUnit в программировании dotnet. Я написал тест с некоторыми методами, которые тестируют контроллеры API. Все, что я хочу, это сделать тест, который после того, как будет выполнен конкретный тест, другой метод должен выполнить некоторые работы с результатом предыдущего метода теста. Но как? Я использую xunit.

Правила испытаний

[Collection("SystemCollection")]
public class AirportTests
{
    private readonly TestContext _sut;
    private const string AuthToken = "SOME-TOKEN";
    private const string BasePath = "base-endpoint";


    public AirportTests(TestContext sut)
    {
        _sut = sut;
    }

    [Theory]
    [InlineData(AuthToken)]
    public async Task AirportListResponse(string authToken)
    {
        _sut.Client.DefaultRequestHeaders.Add("X-Auth-Token", authToken);

        var res = await _sut.Client.GetAsync($"{BasePath}/List");

        var airportListRs =
            JsonConvert.DeserializeObject<AirportListRs>(await res.Content.ReadAsStringAsync());
        airportListRs.Airports.Should().NotBeNull();
    }

    [Theory]
    [InlineData(AuthToken)]
    public async Task AirportListByIdResponse(string authToken)
    {
        _sut.Client.DefaultRequestHeaders.Add("X-Auth-Token", authToken);

        var req = new AirportListRq {AirportId = new[] {8}};
        var res = await _sut.Client.PostAsync($"{BasePath}/ListById", req.AsJson());

        var airportListRs =
            JsonConvert.DeserializeObject<AirportListRs>(await res.Content.ReadAsStringAsync());
        airportListRs.Airports.Should().NotBeNull();
    }

    [Theory]
    [InlineData(AuthToken)]
    public async Task AirportAddResponse(string authToken)
    {
        _sut.Client.DefaultRequestHeaders.Add("X-Auth-Token", authToken);

        var req = new AirportAddRq
        {
            CityId = 1,
            Code = "testCode",
            Name = "testName"
        };
        var res = await _sut.Client.PostAsync($"{BasePath}/Add", req.AsJson());

        var airportAddRs = JsonConvert.DeserializeObject<AirportAddRs>(await res.Content.ReadAsStringAsync());

        airportAddRs.Success.Should().BeTrue();
    }

    [Theory]
    [InlineData(AuthToken)]
    public async Task AirportEditResponse(string authToken)
    {
        _sut.Client.DefaultRequestHeaders.Add("X-Auth-Token", authToken);
        // SHOULD GET PREVIOUS TEST RESULT WHICH IS AN OBJECT AND DO SOME OTHER TESTS

    }
}

Тестовый контекст

public class TestContext : IDisposable
{
    public HttpClient Client { get; set; }
    private TestServer _server;

    public TestContext()
    {
        SetupClient();
    }

    private void SetupClient()
    {
        var configuration = new ConfigurationBuilder()
            .SetBasePath(AppContext.BaseDirectory)
            .AddJsonFile("appsettings.json")
            .Build();

        _server = new TestServer(new WebHostBuilder().UseConfiguration(configuration).UseStartup<Startup>());

        Client = _server.CreateClient();
    }

    public void Dispose()
    {
        //
    }
}

Коллекция

[CollectionDefinition("SystemCollection")]
public class Collection : ICollectionFixture<TestContext>
{
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...