Как загрузить данные конфигурации в проекте Tests в .NET Core 2.1? - PullRequest
0 голосов
/ 17 ноября 2018

Я искал ответ на вопрос, пытаясь создать экземпляр и запустить некоторые методы класса контроллера, который использует файл конфигурации в отдельном проекте.Это также происходит при попытке протестировать мой контроллер из проекта Testing xUnit.

Вот мой класс контроллера, который прекрасно работает при запуске проекта, в который он входит:

public class MyController
{
    private static String Payload;
    private static String Endpoint;

    public MyController() {    
         Payload = $"grant_type=password" +
                   $"&client_id={MyConfigurationClass.AppSetting["JsonSection:clientid"]}" +
                   $"&client_secret={MyConfigurationClass.AppSetting["JsonSection:secret"]}" +
                   $"&username={MyConfigurationClass.AppSetting["JsonSection:user"]}" +
                   $"&password={MyConfigurationClass.AppSetting["JsonSection:password"]}";
         Endpoint = MyConfigurationClass.AppSetting["JsonSection:endpoint"];
    }

    public static string GetToken()
    {
        string HtmlResult = string.Empty;
        using (WebClient wc = new WebClient())
        {
            wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
            HtmlResult = wc.UploadString(Endpoint, Payload);
        }
        var json = JsonConvert.DeserializeObject<Token>(HtmlResult);
        return json.access_token;
    }

    public String DoSomething()
    {
        GetToken();         
        return "testing ok";
    }

    public class Token
    {
        public string access_token { get; set; }
    }
}

Этот контроллеркласс должен получить конфигурацию из файла json и использовать ее при выполнении http-вызовов к внешнему API.

Теперь, когда я пытаюсь создать экземпляр MyController из отдельного проекта, я получаю исключение, вот мой тест изПроект тестирования:

    [Fact]
    public void Test1()
    {
        var controller = new MyController();
        var result = controller.DoSomething();
        //Assert
        Assert.Equal("testing ok", result);
    }

Я получаю следующее исключение:

System.IO.FileNotFoundException: Не удалось загрузить файл или сборку 'Microsoft.Extensions.Configuration.Abstractions, Version =2.1.1.0, Культура = нейтральная, PublicKeyToken = adb9793829ddae60 '.Система не может найти указанный файл.

Кто-нибудь может предоставить некоторую помощь или документацию о том, как этого добиться?

1 Ответ

0 голосов
/ 22 ноября 2018

Только что обнаружил, что добавление следующих библиотек NuGet частично решает проблему:

Microsoft.Extensions.Configuration Microsoft.Extensions.Configuration.Json

После добавления этих библиотек в мой проект тестирования я устранил вышеуказанную проблему, после чего мне пришлось вручную скопировать файл json в свой проект и обязательно прочитать его один раз в своих тестах:

    var config = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("myConfigurationClassFile.json")
        .Build();
    controller = new MyController();

Не уверен, что это лучший способ сделать это, просто я нашел его.

...