我有一些需要在STA模型下运行的NUnit测试用例。
正如许多网站或博客(例如here)所讨论的那样,我在配置文件(“app.conig”)中添加了一个配置文件(“app.conig”),其中包含以下内容。
<?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 GUI 上运行我的单元测试而不使用NUnit项目文件,这可以正常工作。
但是,一旦我通过NUnit项目文件(.nunit)将单元测试加载到NUnit GUI,单元测试就会开始失败。
我已按照此博客上的内容(Here)尝试了不同的配置文件名,但使用“app.config”以外的任何配置文件名都会导致我的单元测试在任何情况下都失败。
那就是说,设置它的正确方法是什么,以便我的单元测试在STA下运行,无论如何?
答案 0 :(得分:10)
从NUnit 2.5开始,您可以使用RequiresSTAAttribute。
答案 1 :(得分:1)
评论经常被忽视,因为jnm2提供了重要提示......显然,如果在此处添加此评论作为额外答案,我可以获得一些奖励积分......; - )
对于 NUnit 3.x ,请使用[Apartment(ApartmentState.STA)]
P.S。额外奖励:我修复了文档的链接。
答案 2 :(得分:0)
对于NUnit 3.11,另一个对我有用的解决方案是在AssemblyInfo中添加以下属性:
[程序集:RequiresThread(ApartmentState.STA)]