在NUnit测试中使用WPF组件 - 如何使用STA?

时间:2010-02-08 08:54:02

标签: c# wpf unit-testing nunit resharper

我需要在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.
}

3 个答案:

答案 0 :(得分:62)

您应该将RequiresSTA属性添加到测试类中。

[TestFixture, RequiresSTA]
public class MyTestClass
{
}

答案 1 :(得分:41)

对于更新的版本,该属性已更改:

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

答案 2 :(得分:0)

您是否尝试过this


  

...只需为您尝试测试的dll创建一个app.config文件,并添加一些NUnit相应的设置以强制NUnit将测试环境创建为STA而不是MTA。

     

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

<?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>