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

发布于 2024-08-20 23:59:19 字数 490 浏览 4 评论 0原文

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

系统.InvalidOperationException:

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

我已经读过有关此问题的信息,听起来该线程需要 STA,但我还没想出如何做到这一点。触发问题的是以下代码:

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

I need to use some WPF components in an NUnit unit test. I run the test through ReSharper, and it fails with the following error when using the WPF object:

System.InvalidOperationException:

The calling thread must be STA, because many UI components require this.

I've read about this problem, and it sounds like the thread needs to be STA, but I haven't figured out how to do this yet. What triggers the problem is the following code:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

不念旧人 2024-08-27 23:59:19

在更新的版本中,该属性已更改:

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

With more recent versions, the attribute has changed :

[Apartment(ApartmentState.STA)]
public class MyTestClass
{}
顾冷 2024-08-27 23:59:19

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

[TestFixture, RequiresSTA]
public class MyTestClass
{
}

You should add the RequiresSTA attribut to your test class.

[TestFixture, RequiresSTA]
public class MyTestClass
{
}
友谊不毕业 2024-08-27 23:59:19

您尝试过这个吗?


...只需为您尝试测试的 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> 

Have you tried this?


... simply create an app.config file for the dll you are attempting to test, and add some NUnit appropriate settings to force NUnit to create the test environemnt as STA instead of MTA.

For convenience sake, here is the config file you would need (or add these sections to your existing config file):

<?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> 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文