在NUnittesting中使用WPF组件 – 如何使用STA?

我需要在NUnitunit testing中使用一些WPF组件。 我通过ReSharper运行testing,并且在使用WPF对象时失败,出现以下错误:

System.InvalidOperationException:

调用线程必须是STA,因为许多UI组件都需要这个。

我已经读过关于这个问题,听起来像线程需要是STA ,但我还没有想出如何做到这一点。 是什么触发了这个问题是下面的代码:

[Test] public void MyTest() { var textBox = new TextBox(); textBox.Text = "Some text"; // <-- This causes the exception. } 

你尝试过吗?


…简单地为您正在尝试testing的dll创build一个app.config文件,并添加一些适当的NUnit设置来强制NUnit创buildtesting环境作为STA而不是MTA。

为了方便起见,这里是您需要的configuration文件(或将这些部分添加到您现有的configuration文件中):

 <?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <sectionGroup name="NUnit"> <section name="TestRunner" type="System.Configuration.NameValueSectionHandler"/> </sectionGroup> </configSections> <NUnit> <TestRunner> <add key="ApartmentState" value="STA" /> </TestRunner> </NUnit> </configuration> 

你应该添加RequiresSTA属性到你的testing类。

 [TestFixture, RequiresSTA] public class MyTestClass { } 

随着更新的版本,属性已经改变:

 [Apartment(ApartmentState.STA)] public class MyTestClass {}