我想测试一个使用剪贴板(WindowsForms)的应用程序,我也需要在单元测试中使用剪贴板.为了使用它,它应该在STA模式下运行,但由于NUnit TestFixture没有main方法,我不知道在哪里/如何注释它.
mas*_*2k1 100
如果您使用的是nunit 2.5+,则可以使用新的The RequiresSTAAttributeclass
[TestFixture, RequiresSTA]
Run Code Online (Sandbox Code Playgroud)
或装配水平.
[assembly:RequiresSTA]
Run Code Online (Sandbox Code Playgroud)
不需要配置文件.检查:http://www.nunit.org/index.php?p = requiresSTA& r = 2.5
Joe*_*elC 58
NUnit 3.0
我们最近迁移到NUnit 3.0,我们使用的旧属性不再有效.我们的测试使用了mas_oz2k1上面的答案的混合[STAThread]和[RequiresSTA].STAThread因为不再找到而导致编译错误,而且RequiresSTA正在发出警告,因为它已被弃用.
新政似乎使用以下内容:
装配水平
[assembly: Apartment(ApartmentState.STA)]
Run Code Online (Sandbox Code Playgroud)
班级
[TestFixture]
[Apartment(ApartmentState.STA)]
Run Code Online (Sandbox Code Playgroud)
方法级别
[Test]
[Apartment(ApartmentState.STA)]
Run Code Online (Sandbox Code Playgroud)
试图找到这些信息让我走上了一条黑暗的道路,人们正在使用一个名为CrossThreadTestRunner的类来修改他们的测试代码.这是2004年我假设的解决方案,在创建这些属性类之前.
Ber*_*ann 33
对于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>
Run Code Online (Sandbox Code Playgroud)
您可以使用以下C#代码验证公寓线程是否为STA:
if (Thread.CurrentThread.GetApartmentState() != ApartmentState.STA)
{
throw new ThreadStateException("The current threads apartment state is not STA");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20150 次 |
| 最近记录: |