Проблема с выполнением тестов NUnit под STA - PullRequest
4 голосов
/ 10 августа 2009

У меня есть несколько тестовых примеров NUnit, которые нужно запускать по модели STA.

Как обсуждалось на многих веб-сайтах или в блогах (например, здесь ), я добавил файл конфигурации ("app.conig") в свою тестовую сборку NUnit со следующим содержимым.

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

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

 [Test]
 public void CheckSTA()
 {
    ApartmentState aptState = Thread.CurrentThread.GetApartmentState();

    Assert.IsTrue(aptState == ApartmentState.STA);
 }

Это прекрасно работает, если я запускаю свой модульный тест на консоли NUnit или в графическом интерфейсе NUnit без использования файла проекта NUnit.

Однако, как только я загружаю модульный тест в графический интерфейс NUnit через файл проекта NUnit (.nunit), модульный тест начинает давать сбой.

Я пробовал другое имя файла конфигурации, следуя тому, что написано в этом блоге ( Здесь ), но использование любого имени файла конфигурации, кроме "app.config", приводит к сбою моего модульного теста при любых обстоятельствах ,

Тем не менее, как правильно настроить это так, чтобы мой модульный тест запускался под STA, несмотря ни на что?

Ответы [ 3 ]

10 голосов
/ 10 августа 2009

Начиная с NUnit 2.5, вы можете использовать атрибут RequSTA.

1 голос
/ 18 января 2017

Комментарии часто пропускаются, и потому что jnm2 дал важный совет ... и, очевидно, я могу заработать несколько бонусных баллов, если добавить этот комментарий в качестве дополнительного ответа здесь ...; -)

Для NUnit 3.x используйте [Apartment (ApartmentState.STA)]

p.s. дополнительный бонус: я исправил ссылку на документацию.

0 голосов
/ 20 марта 2019

Для NUnit 3.11, другое решение, которое сработало для меня, заключается в добавлении следующего атрибута в AssemblyInfo:

[сборка: RequThread (ApartmentState.STA)]

...