0

xunit.console.exe当我关闭使用 Serilog 的应用程序时,出现以下异常:

System.AggregateException: One or more errors occurred. ---> System.Threading.ThreadAbortException: Thread was being aborted.
   at Serilog.Sinks.Async.BackgroundWorkerSink.Pump()
   at System.Threading.Tasks.Task.Execute()
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
   at Serilog.Sinks.Async.BackgroundWorkerSink.Dispose()
   at Serilog.LoggerConfiguration.<CreateLogger>b__28_0()
---> (Inner Exception #0) System.Threading.ThreadAbortException: Thread was being aborted.
   at Serilog.Sinks.Async.BackgroundWorkerSink.Pump()
   at System.Threading.Tasks.Task.Execute()<---

是的,我做了一些大胆的事情(创建了一组 SerilogWriteTo.Async包装的记录器),但我需要找出最干净的方法来不引发异常并返回干净的测试运行。(如果有装配未初始化的钩子,我会调用Log.CloseAndFlush()它)

(是的,我很欣赏单元测试不应该连接重量级日志记录,但我仍然需要解决集成测试的问题)

(当我猜出来的时候会自己回答;我只是不能用谷歌搜索答案,相信应该可以)

4

1 回答 1

0

不仅仅是修复你的代码是没有意义的——测试的全部意义就是倾听它们;)

在这个特定的实例中,一些代码静态构建了对应用程序行为非常重要的记录器/审计器,它们应该作为构造函数依赖项浮出水面,而不是隐藏在第一个实例深处的静态变量中。

我到达这一点的原因是我的应用程序具有横切的日志记录要求,这对吞吐量至关重要,导致我切换日志记录方法 - 被迫这样做会将日志管理推向更好的地方,这是一个胜利(隐藏它将是在测试中为偶然的事情支付性能成本的滑坡的又一步)。

于 2018-04-04T10:00:51.720 回答