【发布时间】:2011-01-14 07:02:20
【问题描述】:
我需要在 NUnit 单元测试中使用一些 WPF 组件。我通过 ReSharper 运行测试,使用 WPF 对象时失败并出现以下错误:
System.InvalidOperationException:
调用线程必须是 STA,因为很多 UI 组件都需要这个。
我已经阅读过这个问题,听起来线程需要是STA,但我还没有弄清楚如何做到这一点。触发问题的是以下代码:
[Test]
public void MyTest()
{
var textBox = new TextBox();
textBox.Text = "Some text"; // <-- This causes the exception.
}
【问题讨论】:
-
这不是单元测试。另外,您确定要让您的测试依赖 WPF 组件吗?出于上述原因,UI 应与应用程序逻辑分开。
-
嗯 - 我知道这里没有实际测试,这不是我的单元测试的样子。但是 - 这是足够的代码来说明这一点。此外 - 问题与这是通过 ReSharper 运行的 nNnit 单元测试这一事实有关 - 所以我需要保留这个问题的上下文。你的另一点是有效的。我不希望我的单元测试依赖于 WPF 组件,但现在这似乎是最好的解决方案。看看我以后能不能把它弄出来..
-
如果您想了解为什么我在应用程序逻辑中有 UI,请参阅我的另一个问题:stackoverflow.com/questions/2220842/…
-
在动态 UI 中,例如从
System.Windows.Interactivity.Behavior<>派生的行为、WPF 扩展方法(例如static void InsertUnder(this UIElementCollection, UIElement afterThis, UIElement toInsert))、布局管理器代码、动态数据模板和组件创作是一些示例场景,其中编写依赖于 WPF 组件的单元测试是实用的。
标签: c# wpf unit-testing nunit resharper