5

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

InvalidOperationException “LocalDataStoreSlot 存储已被释放”

mscorlib.dll!System.LocalDataStore.GetData(System.LocalDataStoreSlot 插槽)

mscorlib.dll!System.Threading.Thread.GetData(System.LocalDataStoreSlot 插槽)

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

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

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

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

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

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

谢谢

4

1 回答 1

1

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

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

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

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

于 2015-03-25T12:01:29.530 回答