如何在.NET Core 2.1的Tests项目中加载配置数据?

时间:2018-11-17 16:13:01

标签: unit-testing asp.net-core configuration-files

在尝试实例化并运行在单独项目中使用配置文件的控制器类的某些方法时,我一直在寻找问题的答案。尝试从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文件中获取配置,并在对外部API进行http调用时使用它。

现在,当尝试从单独的项目实例化MyController时,出现异常,这是来自Testing项目的Test:

    [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,版本= 2.1.1.0,   文化=中性,PublicKeyToken = adb9793829ddae60'。系统无法   找到指定的文件。

任何人都可以提供有关如何实现此目标的帮助或文档吗?

1 个答案:

答案 0 :(得分:0)

仅发现添加以下NuGet库可以部分解决该问题:

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

在将这些库添加到我的测试项目后,我解决了上述问题,此后,我不得不手动将json文件复制到我的项目中,并确保在测试中读取一次:

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

不确定这是否是最好的方法,那只是我发现的方法。