NUnit 的 log4Net 问题(尝试过 v2.5.7、2.5.2、2.4.8、2.4.7)

2023-12-12

针对生产代码程序集运行 NUnit 时,我收到错误(请参阅帖子底部)。生产代码程序集引用了内部使用 log4net 的第三方框架(具体来说,这是 SimplyAccounting 的 SDK)。它使用的log4net版本是1.2.9.0。在我们通过 dll 文件中的公共 api 使用的这个第三方框架之外,log4net 不是我们生产代码的一部分。

在进行故障排除时,我从单元测试项目中删除了对生产代码程序集的引用,并添加了对 SimplyAccounting SDK 的引用。当我这样做时,NUnit 抛出以下错误。如果第三方引用(或生产代码引用)不在测试项目中,则 Nunit 运行良好。任何可能存在 log4net 冲突的解决方法都会有所帮助。我正在使用 NUnit 2.5.2。

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.NullReferenceException: Object reference not set to an instance of an object.
   at log4net.Layout.LayoutSkeleton.get_Header()
   at log4net.Appender.TextWriterAppender.WriteHeader()
   at log4net.Appender.TextWriterAppender.set_Writer(TextWriter value)
   --- End of inner exception stack trace ---

Server stack trace: 
   at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
   at System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.Reflection.RuntimePropertyInfo.SetValue(Object obj, Object value, BindingFlags invokeAttr, Binder binder, Object[] index, CultureInfo culture)
   at System.Reflection.RuntimePropertyInfo.SetValue(Object obj, Object value, Object[] index)
   at NUnit.Core.Log4NetCapture.SetAppenderTextWriter(TextWriter writer)
   at NUnit.Core.Log4NetCapture.StartCapture()
   at NUnit.Core.TextCapture.set_Enabled(Boolean value)
   at NUnit.Core.RemoteTestRunner.StartTextCapture(EventListener queue)
   at NUnit.Core.RemoteTestRunner.BeginRun(EventListener listener, ITestFilter filter)
   at System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs)
   at System.Runtime.Remoting.Messaging.StackBuilderSink.PrivateProcessMessage(RuntimeMethodHandle md, Object[] args, Object server, Int32 methodPtr, Boolean fExecuteInContext, Object[]& outArgs)
   at System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg, Int32 methodPtr, Boolean fExecuteInContext)

Exception rethrown at [0]: 
   at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   at NUnit.Core.TestRunner.BeginRun(EventListener listener, ITestFilter filter)
   at NUnit.Core.ProxyTestRunner.BeginRun(EventListener listener, ITestFilter filter)
   at NUnit.Util.TestDomain.BeginRun(EventListener listener, ITestFilter filter)
   at NUnit.Util.TestLoader.RunTests(ITestFilter filter)
   at NUnit.UiKit.TestSuiteTreeView.RunTests(ITest[] tests, Boolean ignoreCategories)
   at NUnit.UiKit.TestSuiteTreeView.RunSelectedTests()
   at NUnit.UiKit.TestTree.RunSelectedTests()
   at NUnit.Gui.NUnitForm.runButton_Click(Object sender, EventArgs e)
   at System.Windows.Forms.Control.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnClick(EventArgs e)
   at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ButtonBase.WndProc(Message& m)
   at System.Windows.Forms.Button.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

一种解决方案(尽管相当具有破坏性并且没有解决根本问题)是让您的生产程序集与包装 SimplyAccount SDK 的接口对话,而不是直接与其对话。然后,您的生产代码不需要引用 SDK dll,您可以通过传入您创建的接口的假实现来自由测试它。

这具有与 SDK 分离的设计优势,但正如我所说,它可能会对您的代码库造成很大的破坏。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NUnit 的 log4Net 问题(尝试过 v2.5.7、2.5.2、2.4.8、2.4.7) 的相关文章

随机推荐

  • 自签名小程序可以访问本地文件系统吗

    您好 我已经创建了一个自签名小程序 但无法访问本地文件系统 我该怎么办 你需要将你的IO代码包装在里面特权动作 通常 您需要使用测试证书对小程序进行签名 用户将看到警告 并且在加载小程序时必须接受证书 那么您需要将代码包装在 Privili
  • Python:binned_statistic_2d 均值计算忽略数据中的 NaN

    我在用scipy stats binned statistic 2d通过查找每个箱内点的平均值 将不规则数据分箱到统一网格上 x y np meshgrid sort np random uniform 0 1 100 sort np ra
  • src绝对路径问题

    我有一个图像C wamp www site img我尝试将其显示在页面中 img src 但它不起作用 该文件实际上在那里 如果我尝试使用相对路径引用它 我就会得到图片 img src img mypicture jpg 错误在哪里 我错过
  • 在 Windows 中从命令行运行 python 脚本

    我正在尝试跑步蛇食 分析一个Python项目 我使用的是 Windows 机器 到目前为止我已经能够弄清楚如何 安装 Tortoise for Mercurial 以从站点下载 SnakeFood 代码 设置 Windows 路径以从命令提
  • Jquery 自动完成底部附加链接

    I am using jQuery auto complete plugin in my web project I want to show 3 element and after that i want to append see al
  • 如何通过重新定义的 ListBox 模板使用 UI 虚拟化

    我正在尝试使用 ListBox 作为包含多个项目的视图 当然 我需要在其中使用 UI 虚拟化 问题是虚拟化仅在我以这种方式声明 ListBox 时才起作用
  • 如何以编程方式获取下一个预定的触发时间?

    我制作了一个新的可安装触发器 该触发器每 2 天以编程方式为我的电子表格触发一次 那么当我返回到电子表格时 我可以得到下次触发函数的时间吗 或者甚至它触发的频率是多少 我所看到的是我可以获得它的类型 它触发的函数 唯一ID等等 Thanks
  • 如何删除具有任何零值的行

    我有一个问题需要解决如何删除 R 中具有零值的行 另一方面 我可以使用na omit 删除所有 NA 值或使用complete cases 删除包含 NA 值的行 有谁知道如何删除 R 中具有零值的行 例如 Before DateTime
  • 正则表达式匹配多个组

    我有以下带有正则表达式的字符串示例 我试图匹配它 Regex d 3 0 9a fA F 2 3 要匹配的字符串 010 00 00 00 我的问题是这样的 正则表达式匹配并捕获 1 组 最终00在字符串的末尾 但是 我希望它能够匹配所有三
  • 如何判断 `constexpr` 是否在编译时求值(无需手动检查)

    有没有一种标准方法可以找出编译器做了什么constexpr功能 旁注 对于调试 默认情况下每个 constexpr 函数都会推迟到运行时 为什么这是明智的 有没有办法影响这一点 对于发布取决于上下文 显然 对于小型测试设置 您可以轻松检查生
  • MySQL 如何解释 VARCHAR 字段大小?

    假设一个字段是这样声明的 a VARCHAR 255 其中可以存储多少个字符 是255还是256 使用了多少空间 我们应该使用 2 的幂然后减去 1 还是没有关系 A VARCHAR 255 最多可以存储 255 个字符 无论字符集编码所需
  • Azure 上的 Asp.Net VNext 应用程序设置

    我真的很喜欢 Asp Net vNext 使用默认 appsettings json 的新配置功能 但当我将网站发布为 Azure Web 应用程序时 我想更改该文件的值 旧的 web config appsettings 很容易更改和配置
  • 使用 pyexiftool 编辑/更新照片元数据的数据

    我想使用 exiftool 更新照片元数据的数据 例如温度传感器 高度传感器和 GPS 经度 高度的数据 首先 我尝试在 exiftool 配置文件中使用命令行添加这些数据的新标签 并且它有效 现在 我想使用 python 脚本更新数据 然
  • 如何在窗口控制台应用程序中调用非静态方法

    我构建了一个控制台应用程序 并尝试测试我的应用程序是否按预期工作 我创建了 API 类的实例 如下面的代码所示 但收到错误 An object reference is required for the non static field 我
  • 包“forecast”的安装具有非零退出状态

    With R version 3 2 3 2015 12 10 on centOS我在尝试着install packages forecast 我明白了 install packages 预测 将软件包安装到 usr lib64 R lib
  • 随机化数组

    我希望实现 Dr D E Knuth 的减法随机数生成算法 我希望实现一个 ATM 面板 当用户登录时 按钮将被扰乱 每个按钮都会改变其位置 这是我的代码 Public Sub addbutton Dim n As Integer 0 Fo
  • 在qt中执行java文件

    我正在尝试在 qt 中执行 java 文件 这是我的 java 文件代码 import android appwidget AppWidgetManager import android appwidget AppWidgetProvide
  • 检测网站访问者是否安装了工具栏,例如。使用 JavaScript 的 Google 工具栏

    我正在开发一个经常使用弹出窗口的在线教育网站 这是第三方提供商的学习管理系统的一部分 因此不可能改变其工作方式 我们接到很多帮助台电话 询问用户在操作系统 浏览器设置和其他工具栏中遇到的弹出窗口拦截器问题 我正在使用 javascript
  • Python 的 time.sleep() 方法等待的时间不正确

    我已经遇到过这个问题好几次了 重新启动 python 似乎可以工作 或 ipython 但是 例如 这是运行以下代码的一种可能的输出 startt time time for i in range 4 time sleep 1 print
  • NUnit 的 log4Net 问题(尝试过 v2.5.7、2.5.2、2.4.8、2.4.7)

    针对生产代码程序集运行 NUnit 时 我收到错误 请参阅帖子底部 生产代码程序集引用了内部使用 log4net 的第三方框架 具体来说 这是 SimplyAccounting 的 SDK 它使用的log4net版本是1 2 9 0 在我们