在STA下运行NUnit测试的问题

问题描述 投票:4回答:3

我有一些需要在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下运行,无论如何?

c# configuration nunit
3个回答
10
投票

从NUnit 2.5开始,您可以使用RequiresSTAAttribute。


1
投票

评论经常被忽视,因为jnm2给出了一个重要的提示......显然,如果在此处添加此评论作为补充答案,我可以获得一些奖励积分...... ;-)

对于NUnit 3.x,请使用[Apartment(ApartmentState.STA)]

附:额外奖励:我修复了文档的链接。


0
投票

对于NUnit 3.11,另一个对我有用的解决方案是在AssemblyInfo中放入以下属性:

[assembly:RequiresThread(ApartmentState.STA)]

© www.soinside.com 2019 - 2024. All rights reserved.