Использование компонентов WPF в тестах NUnit - как использовать STA? - PullRequest
40 голосов
/ 08 февраля 2010

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

System.InvalidOperationException:

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

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

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

Ответы [ 3 ]

62 голосов
/ 04 июня 2013

Вы должны добавить атрибут Требуется STA к вашему тестовому классу.

[TestFixture, RequiresSTA]
public class MyTestClass
{
}
43 голосов
/ 09 июня 2016

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

[Apartment(ApartmentState.STA)]
public class MyTestClass
{}
0 голосов
/ 08 февраля 2010

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


... просто создайте файл 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> 
...