Значение не может быть нулевым. (Параметр 'connectionString') Xunit test - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь написать модульный тест Xunit:

  public class UserTest
{

    private readonly TestServer _server;
    private readonly HttpClient _client;

    public UserTest()
    {
        _server = new TestServer(new WebHostBuilder().UseStartup<Startup>());
        _client = _server.CreateClient();
    }

    [Fact]
    public async Task GetAllUserTest()
    {
        var request = new HttpRequestMessage(new HttpMethod("Get"), "/Api/Users");

        var response =await _client.SendAsync(request);

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

запрос проверка в моем решении. После выполнения теста тест завершается неудачно и появляется сообщение об ошибке:

Значение не может быть нулевым. (Параметр 'connectionString')

Если я запускаю api, он работает гладко и не имеет проблем с ПОДКЛЮЧЕНИЕМ.

startup.cs:

 services.AddDbContext<BlogProjectContext>(option =>
        option.UseSqlServer(Configuration.GetConnectionString("BlogProjectConnection"))
        );

appsetings. json:

    {
  "AppSettings": {
    "Secret": "This is the secret key and its very important"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "BlogProjectConnection": "Data Source=.;Initial Catalog=BlogProject_DB;Integrated Security=True"

  }
}

1 Ответ

1 голос
/ 01 апреля 2020

Я предполагаю, что ваши юнит-тесты находятся в проекте, отличном от вашего API? Ваши проекты модульных тестов выполняются в другом каталоге, чем ваш API, поэтому они не могут «увидеть» файл appsettings.json, который есть у вашего API, и вы видите эту ошибку.

Вы действительно не хотите ваш блок тестирует, чтобы выдавать реальные HTTP-запросы. Средство от этого - макет HttpClient. Здесь полезный пост в блоге о насмешках HttpClient.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...