7 c# mstest dependency-injection appsettings asp.net-core
我创建了一个asp.net核心Web应用程序和一个单元测试应用程序.
我使用"ASP.NET Core Web Application(.NET Core)"模板创建了asp.net应用程序,并使用"类库(.NET Core)"模板创建了单元测试项目.
我使用以下文章中的说明配置了MSTest:
宣布MSTest Framework支持.NET Core RC2/ASP.NET Core RC2
我已将应用程序组织到控制器和服务中,控制器从appsettings.json读取值并将这些值作为参数传递给服务方法.
我有一个AppSettings类如下
public class AppSettings
{
public string Setting1 { get; set; }
public string Setting2 { get; set; }
public string Setting3etc { get; set; }
}
public static class App
{
public static AppSettings Settings { get; set; }
public static void ConfigureSettings(IOptions<AppSettings> settings)
{
Settings = settings.Value;
}
}
Run Code Online (Sandbox Code Playgroud)
控制器构造函数如下
public ValuesController(IOptions<AppSettings> settings)
{
App.ConfigureSettings(settings);
}
Run Code Online (Sandbox Code Playgroud)
在Startup.cs中,我在ConfigureServices方法中有以下行
services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));
Run Code Online (Sandbox Code Playgroud)
我从以下文章中了解到了这种技术
这在运行时工作,但我在单元测试中访问这些设置时遇到困难.
我正在尝试找到一种方法将appsettings.json中的值放入我的测试项目中,这样我就可以将它们传递给控制器和服务.
我的测试方法看起来像这样
[TestMethod]
[TestCategory("Service - Method1")]
public void ServiceMethod1Test()
{
// this compiles but gets null reference exception
var setting1 = App.Settings.Setting1;
var setting2 = App.Settings.Setting2;
var service = new Service(setting1, setting2);
var argument1 = "argument";
var actual = service.Method1(argument1);
var expected = "expected result";
CollectionAssert.AreEqual(expected, actual);
}
[TestMethod]
[TestCategory("Controller - Method1")]
public void ControllerMethod1Test()
{
// how do i create this settings instance?
var settings = ???
var controler = new ValuesController(settings);
var argument1 = "argument";
var actual = controller.Method1(argument1);
var expected = "expected result";
CollectionAssert.AreEqual(expected, actual);
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能将实现的类的实例传递
IOptions<MySettings>给控制器测试的控制器构造函数,我怎样才能将这些值传递给服务测试中的服务方法.
只需参考Options包并使用即可
IOptions<MyOptions> options = Options.Create(new MyOptions()
{
...
});
Run Code Online (Sandbox Code Playgroud)
请参阅此处获取源代码参考.
| 归档时间: |
|
| 查看次数: |
3243 次 |
| 最近记录: |