【问题标题】:NUnit test process fails frequently with WPF controlsNUnit 测试过程经常因 WPF 控件而失败
【发布时间】:2014-10-23 12:40:34
【问题描述】:

我们有一个包含 1000 个左右的测试的 NUnit 测试项目。该项目包含主要针对自定义 WPF 控件的高级组件测试。我们的构建服务器 (TeamCity) 上的测试过程经常失败:

InvalidOperationException "LocalDataStoreSlot 存储已被释放"

mscorlib.dll!System.LocalDataStore.GetData(System.LocalDataStoreSlot slot)

mscorlib.dll!System.Threading.Thread.GetData(System.LocalDataStoreSlot slot)

WindowsBase.dll!System.Windows.Interop.ComponentDispatcher.CurrentThreadData.get() ...

测试包含 [RequiresSTA] 属性、Window.Show()、Dispatcher 操作等...所以它绝对不是一个常规的单元测试项目。

失败看起来完全是随机的,我们修改了它以 80% 的几率发生,但大多数时候它根本不会发生。绝对神秘,有时生产代码中的简单更改(例如更改 xaml 代码中的样式)会触发故障,然后生产代码中的下一次更改修复它。

这种特定的随机故障有时让我们的开发团队非常沮丧,我们的扩展构建系统受到这种故障的严重阻碍。

我们很少能用 nunit-console.exe 在本地运行项目来重现它。

你们见过这样的测试过程失败吗?任何如何解决此问题的提示将不胜感激。

谢谢

【问题讨论】:

  • 我们在构建服务器上遇到了同样的问题,但使用的是 Jenkins。几乎从未在开发机器上本地看到过。我们还对不是真正单元测试的 WPF 内容进行了大量测试。有一段时间的理论是这个问题出现在未终止的调度程序做奇怪的事情,但现在我们似乎有它,即使正确地杀死任何已启动的调度程序。你设法解决了这个问题吗?有什么更新吗?
  • 我们仍在努力解决这个问题。还没有解决方案。

标签: wpf nunit dispatcher nunit-console


【解决方案1】:

我们在我们的环境(Jenkins、Windows 8、NUnit 2.6.3)中遇到了完全相同的问题。

这些措施为我们解决了问题。

  1. 确保 NUnit 不在 .NET 3.5 或更早版本下运行。这个post 解释了如何。
  2. 使用 NUnit 运行程序命令行选项 /nothread 解决关闭时 NUnit 崩溃的问题。如果您使用的是MS Build Community Tasks,则需要将NUnit 任务的TestInNewThread 属性设置为false。

可以在MSDN forum thread 中找到有关崩溃性质的一些背景信息。最终这需要在 NUnit 中修复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-10
    • 1970-01-01
    • 2023-01-20
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    相关资源
    最近更新 更多