使用WPF控件时,NUnit测试过程经常失败

时间:2014-10-23 12:40:34

标签: wpf nunit dispatcher nunit-console

我们有一个NUnit测试项目,大约有1000个测试。该项目包含主要用于自定义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在本地运行项目来重现它。

你们有没有见过这样的测试过程失败?任何有关如何解决此问题的提示都将受到高度赞赏。

由于

1 个答案:

答案 0 :(得分:1)

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

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

  1. 确保NUnit不在.NET 3.5或更早版本下运行。这个post解释了如何。
  2. 使用NUnit runner命令行选项/nothread解决关闭时NUnit崩溃的问题。如果您正在使用MS Build Community Tasks,则需要将TestInNewThread任务的NUnit属性设置为false
  3. 有关崩溃性质的一些背景信息可以在MSDN forum thread中找到。最终需要在NUnit中修复。