Подтвердить что ты не робот

Использование компонентов WPF в тестах NUnit - как использовать STA?

Мне нужно использовать некоторые компоненты WPF в NUnit unit test. Я запускаю тест через ReSharper, и он не выполняет следующую ошибку при использовании объекта WPF:

System.InvalidOperationException:

Вызывающий поток должен быть STA, потому что для этого требуется множество компонентов пользовательского интерфейса.

Я прочитал об этой проблеме, и кажется, что поток должен быть STA, но я еще не понял, как это сделать, Что вызывает проблему в следующем коде:

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

Ответ 1

Вы пробовали этот?


... просто создайте файл app.config для dll, который вы пытаетесь протестировать, и добавьте некоторые соответствующие настройки 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> 

Ответ 2

Вы должны добавить RequiresSTA в свой тестовый класс.

[TestFixture, RequiresSTA]
public class MyTestClass
{
}

Ответ 3

В более поздних версиях атрибут изменился:

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