Я новичок в интеграционном тестировании с системой 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>
{
}