【发布时间】:2020-08-03 10:14:51
【问题描述】:
我有一个使用 .NetCore 创建的 Windows 服务应用程序。 我想为服务方法创建一些单元测试。
启动类是这样的
public class Startup
{
public static IConfiguration Configuration;
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
}
}
需要测试的类
public class ModelConsumer : IModelConsumer
{
private readonly IProcessHandler _processHandler;
public ModelConsumer(IIProcessHandler processHandler)
{
_processHandler = processHandler;
}
public void OnMessageReceived(ModelDto model)
{
var exportFolder = Startup.Configuration["ExportFolder"];
// do actions
}
}
测试类
[TestClass]
public class ModelConsumerTests
{
[TestMethod]
public void OnMessageReceived()
{
var processHandler = new Mock<IProcessHandler>();
var modelConsumer = new ModelConsumer(processHandler.Object);
var config = InitConfiguration();
var _exportFolder = config["ExportFolder"];
modelConsumer.OnMessageReceived(new ModelDto());
// verify mock call actions
}
public static IConfiguration InitConfiguration()
{
var config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.Build();
return config;
}
}
配置中缺少一些东西,所以测试可以成功运行吗?
【问题讨论】:
-
我会说你应该在你的类中注入
IConfiguration(或者更好地创建和使用包含相应设置部分的特殊类)而不是使用Startup.Configuration。 -
你可以使用
MemoryConfigurationSource
标签: c# unit-testing .net-core