【发布时间】:2019-01-24 00:20:11
【问题描述】:
我有一个测试项目,我在其中设置了一个这样的 http 客户端:
public class TestContext : IDisposable
{
private TestServer _server;
public HttpClient Client { get; private set; }
public TestContext() {
SetUpClient();
}
private void SetUpClient()
{
_server = new TestServer(new WebHostBuilder()
.ConfigureAppConfiguration((builderContext, config) => {
config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
})
.UseStartup<Startup>()
.ConfigureServices( services => {
// ...
})
);
Client = _server.CreateClient();
}
}
使用要测试的项目的 Startup 类。
在我的基础 TestController 中,我正在实例化一个控制台记录器,如下所示:
public WSTestController() {
_log = new LoggerFactory().AddConsole().CreateLogger(this.GetType().Name);
var testContext = new TestContext();
_client = testContext.Client;
// _services = testContext.Services;
}
现在我收到以下警告:
controllers\WSTestController.cs(22,20): warning CS0618:
'ConsoleLoggerExtensions.AddConsole(ILoggerFactory)' is obsolete:
'This method is obsolete and will be removed in a future version.
The recommended alternative is AddConsole(this ILoggingBuilder builder).'
我无法使用 DI 获取记录器,知道如何使用构建器而不是即将弃用的 LoggerFactory 吗???
--
我尝试使用@max-brodin 回答,但出现以下错误:
The following constructor parameters did not have matching fixture data: ILogger log
我猜是因为类 WSTestController 不是使用 new WebHostBuilder() 调用创建的服务器的控制器,所以它不是由 de 依赖注入容器管理的。
我也尝试公开 app.serviceProvider,然后使用 this.ServiceProvider.GetService(typeof(ILogger));,但它返回 null。
我只是无法从测试 TestServer 的类中获取控制台记录器
【问题讨论】:
-
对于单元测试,我建议使用
WebApplicationFactory夹具(docs.microsoft.com/en-us/aspnet/core/test/…)而不是直接创建TestServer。
标签: c# logging .net-core loggerfactory