Получение строки подключения к базе данных в интеграционных тестах .NET Core с помощью xunit - PullRequest
0 голосов
/ 16 сентября 2018

Я делаю интеграционные тесты для моего основного проекта .net. Мне нужно получить доступ к строке подключения для моей базы данных интеграционных тестов.

Я использую базовый проект в качестве справочного и использую его файл запуска,Но я получаю эту ошибку

System.ArgumentNullException : Value cannot be null.
Parameter name: connectionString at Npgsql.EntityFrameworkCore.PostgreSQL.Utilities.Check.NotEmpty(String 
value, String parameterName) in 
/home/roji/projects/EFCore.PG/src/EFCore.PG/Utilities/Check.cs:line 99   
at Microsoft.EntityFrameworkCore.NpgsqlDbContextOptionsExtensions.UseNpgsql(DbContextOptionsBuilder optionsBuilder, String connectionString, Action`1 npgsqlOptionsAction) in /home/roji/projects/EFCore.PG/src/EFCore.PG/Extensions/NpgsqlDbContextOptionsExtensions.cs:line 49
at SurveyAPI.Startup.<ConfigureServices>b__4_1(DbContextOptionsBuilder options)

Мой класс TestClientProvider

public class TestClientProvider
{
    public HttpClient Client { get; private set; }

    public TestClientProvider()
    {   
        var server = new TestServer(new WebHostBuilder().UseStartup<Startup>());

        Client = server.CreateClient();
    }
}

класс теста

public class UnitTest1
{

    [Fact]
    public async Task Test_Get()
    {
        var client = new TestClientProvider().Client;

        var response = await client.GetAsync("/api");

        response.EnsureSuccessStatusCode();

        Assert.Equal(HttpStatusCode.OK, response.StatusCode); 
    }
}

Как заставить тесты использовать мою текущую базу данных?

1 Ответ

0 голосов
/ 17 сентября 2018

Я исправил эту проблему, получив файл appsettings.json и настроив соединение с базой данных в классе TestProvider.

public class TestClientProvider
{
    public HttpClient Client { get; private set; }

    public TestClientProvider()
    {   
        IConfigurationRoot configuration = new ConfigurationBuilder()
            .SetBasePath(AppContext.BaseDirectory)
            .AddJsonFile("appsettings.json")
            .Build();

        WebHostBuilder webHostBuilder = new WebHostBuilder();
        webHostBuilder.ConfigureServices(s => s.AddDbContext<DatabaseContext>(options => options.UseNpgsql(configuration.GetConnectionString("DefaultConnection"))));
        webHostBuilder.UseStartup<Startup>();

        var server = new TestServer(webHostBuilder);

        Client = server.CreateClient();
    }
}
...