web-dev-qa-db-ja.com

NUnitテストでのWPFコンポーネントの使用-STAの使用方法

NUnitユニットテストでいくつかのWPFコンポーネントを使用する必要があります。 ReSharperを使用してテストを実行しましたが、WPFオブジェクトを使用すると、次のエラーで失敗します。

System.InvalidOperationException:

多くのUIコンポーネントがこれを必要とするため、呼び出しスレッドはSTAである必要があります。

この問題について読みましたが、スレッドは [〜#〜] sta [〜#〜] である必要があるようですが、これを行う方法はまだわかりません。問題を引き起こすのは次のコードです。

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

this を試しましたか?


...テストしようとしているdllのapp.configファイルを作成し、NUnitに適切な設定を追加して、NUnitにMTAではなくSTAとしてテスト環境を作成させるだけです。

便宜上、必要な構成ファイルは次のとおりです(またはこれらのセクションを既存の構成ファイルに追加します)。

<?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> 
0
Kent Boogaart

RequiresSTA 属性をテストクラスに追加する必要があります。

[TestFixture, RequiresSTA]
public class MyTestClass
{
}
66
Steven Muhr

最近のバージョンでは、属性が変更されました。

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