У меня есть две системы Asp.Net Core, которые полностью независимы, что означает, что они находятся в разных веб-доменах.Тем не менее, они находятся в одном решении в Visual Studio.Обе системы Asp.Net Core будут размещаться, например, в следующих двух доменах:
https://client -localhost: 8080 и https://api -localhost: 8081
, где клиентское приложение выполняет вызовы на различные маршруты домена Api для получения данных.
У меня нет проблем с выполнением интеграционных тестов (с использованием NUnit) для системы Api, дляпример:
// Integration Test for the Api
[TestFixture]
class IntegrationTestShould
{
public TestServer GetTestServerInstance()
{
return new TestServer(new WebHostBuilder()
.UseStartup<TestServerStartup>()
.UseEnvironment("TestInMemoryDb"));
}
[Test]
public async Task ReturnProductDataFromTestInMemoryDb()
{
using (var server = GetTestServerInstance())
{
var client = server.CreateClient();
var response = await client.GetAsync("/products"); // equivalent to: https://api-localhost:8081/products
var responseString = await response.Content.ReadAsStringAsync();
Assert.AreEqual("{ Shows product data coming from the Api }", responseString);
}
}
}
Чтобы выполнить надлежащий тест интеграции для клиентского приложения, я хотел бы сделать вызовы Api из клиентского приложения в Api.
Является ли этоМожно создать один метод тестирования, в котором я могу запустить оба тестовых сервера (клиент и Api) и использовать API через мой клиент?
Я могу себе представить, например, чтобы внедрить тестовый сервер Apiв клиентский тестовый сервер, чтобы я мог использовать API через мое клиентское приложение.
Существует ли что-то подобное следующему?
// Integration test for the client that relies on the Api
[TestFixture]
class IntegrationTestShould
{
public TestServer GetApiTestServerInstance()
{
return new TestServer(new WebHostBuilder()
.UseStartup<ApiTestServerStartup>()
.UseEnvironment("TestInMemoryDb"));
}
public TestServer GetClientTestServerInstance()
{
return new TestServer(new WebHostBuilder()
.UseStartup<ClientTestServerStartup>()
.UseEnvironment("Development"));
}
[Test]
public async Task ShowProductsFromApiAtClientLevel()
{
using (var apiServer = GetApiTestServerInstance())
using (var clientServer = GetClientTestServerInstance())
{
var client = clientServer.CreateClient(apiServer);
var response = await client.GetAsync("/products"); // equivalent to: https://client-localhost:8080/products which relies on https://api-localhost:8081/products
var responseString = await response.Content.ReadAsStringAsync();
Assert.AreEqual("{ Shows product data coming from the api at client level }",
responseString);
}
}
}