Я искал ответ на вопрос, пытаясь создать экземпляр и запустить некоторые методы класса контроллера, который использует файл конфигурации в отдельном проекте.Это также происходит при попытке протестировать мой контроллер из проекта 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 '.Система не может найти указанный файл.
Кто-нибудь может предоставить некоторую помощь или документацию о том, как этого добиться?