Mic*_*ell 5 dependency-injection xunit xunit.net asp.net-core asp.net-core-1.0
我正在尝试为一个类(在.net Core项目中)编写一个xunit测试,它看起来像:
public Class FoodStore:IFoodStore
{
FoodList foodItems;
public FoodStore(IOptions<FoodList> foodItems)
{
this.foodItems = foodItems;
}
public bool IsFoodItemPresentInList(string foodItemId)
{
//Logic to search from Food List
}
}`
Run Code Online (Sandbox Code Playgroud)
注意:FoodList实际上是一个包含数据的json文件,它在Startup类中加载和配置.
如何编写带有适当依赖注入的xunit测试来测试IsFoodItemPresentInList方法?
您可以创建一个IOptions<FoodList>使用该Options.Create方法的实例:
var foodListOptions = Options.Create(new FoodList());
Run Code Online (Sandbox Code Playgroud)
小智 8
您可以使用OptionsWrapper<T>类伪造您的配置.然后,您可以将此对象传递给要测试的类.这样您就不必使用DI或读取实际配置.
像这样的东西:
var myConfiguration = new OptionsWrapper<MyConfiguration>(new MyConfiguration
{
SomeConfig = "SomeValue"
});
var yourClass = new YourClass(myConfiguration);
Run Code Online (Sandbox Code Playgroud)
小智 6
我遇到了类似的问题(使用 xUnit),经过一番挣扎,我解决了。
答案来得太晚了,但应该对其他人有帮助。
对于您的问题:
public Class FoodStoreTest
{
private readonly IConfigurationRoot _configuration;
private readonly IServiceProvider _serviceProvider;
public FoodStoreTest(){
// read Json
var configBuilder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddEnvironmentVariables();
_configuration = configBuilder.Build();
// SetUp DI
var services = new ServiceCollection();
services.AddOptions(); // this statement is required if you wanna use IOption Pattern.
services.Configure<YuntongxunOptions>(_configuration.GetSection("yuntongxun"));
_serviceProvider = services.BuildServiceProvider();
}
[Fact]
public void GetFootItemOption()
{
IOption<FoodList> optionAccessor = _serviceProvider.GetService<IOptions<FoodList>>();
FoodList footListOptions = optionAccessor.value;
Assert.NotNull(footListOptions)
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
此外,您应该将“appSettings.json”复制到您的项目根文件夹。
| 归档时间: |
|
| 查看次数: |
2381 次 |
| 最近记录: |