Как запустить модульные тесты в режиме STAThread?
Я хотел бы протестировать приложение, использующее буфер обмена (WindowsForms), и мне нужен буфер обмена в моих Unittests. Чтобы использовать его, он должен работать в режиме STA, но поскольку в NUnit Testfixture нет основного метода, я не знаю, где/как его аннотировать...
Спасибо!
Ответы
Ответ 1
Для NUnit 2.2, 2.4 (см. простое решение ниже для 2.5):
Добавьте файл app.config в проект, содержащий ваши модульные тесты, и включите следующее:
<?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 со следующим кодом С#:
if (Thread.CurrentThread.GetApartmentState() != ApartmentState.STA)
{
throw new ThreadStateException("The current threads apartment state is not STA");
}
Ответ 2
Если вы используете nunit 2.5+, вы можете использовать новый RequiresSTAAttribute
в классе
[TestFixture, RequiresSTA]
или уровня сборки.
[assembly:RequiresSTA]
Нет необходимости в файле конфигурации. проверить:
http://www.nunit.org/index.php?p=requiresSTA&r=2.5
Ответ 3
NUnit 3.0
Недавно мы перенеслись в NUnit 3.0, а старые атрибуты, которые мы использовали, больше не работали. В наших тестах использовалась смесь [STAThread]
и [RequiresSTA]
, как в ответе mas_oz2k1 выше. STAThread выдавал ошибки компиляции, поскольку он больше не был найден, и RequiresSTA выдавал предупреждения, поскольку он устарел.
Новый курс, по-видимому, использует следующее:
Уровень сборки
[assembly: Apartment(ApartmentState.STA)]
Уровень класса
[TestFixture]
[Apartment(ApartmentState.STA)]
Уровень метода
[Test]
[Apartment(ApartmentState.STA)]
Попытка найти эту информацию привела меня к темной дороге, где люди модифицировали свой тестовый код, используя класс CrossThreadTestRunner. Это было решение в 2004 году, я предполагаю, до создания этих классов атрибутов.
Ответ 4
В NUnit 2.6.1+ вы можете использовать флаг командной строки /квартира = STA:
NUnit-Console version 2.6.3.13283
Copyright (C) 2002-2012 Charlie Poole.
Copyright (C) 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov.
Copyright (C) 2000-2002 Philip Craig.
All Rights Reserved.
Runtime Environment -
OS Version: Microsoft Windows NT 6.1.7601 Service Pack 1
CLR Version: 4.0.30319.18052 ( Net 4.5 )
NUNIT-CONSOLE [inputfiles] [options]
Runs a set of NUnit tests from the console.
You may specify one or more assemblies or a single
project file of type .nunit.
Options:
...
/apartment=X Apartment for running tests: MTA (Default), STA
...