使用呢-2.5RequiresSTAAttribute与TeamCity4
-
19-08-2019 - |
题
使用TeamCity,我试图获得一个(TestAutomationFX)测试需要一个STA线运行。
它的工作通过一个定制的应用程序。config配置呢2.4.x(8)(以称通过Gishu,谢谢,描述在 http://madcoderspeak.blogspot.com/2008/12/getting-nunit-to-go-all-sta.html)
它的工作通过:
/// <summary>
/// Via Peter Provost / http://www.hedgate.net/articles/2007/01/08/instantiating-a-wpf-control-from-an-nunit-test/
/// </summary>
public static class CrossThreadTestRunner // To be replaced with (RequiresSTA) from NUnit 2.5
{
public static void RunInSTA(Action userDelegate)
{
Exception lastException = null;
Thread thread = new Thread(delegate()
{
try
{
userDelegate();
}
catch (Exception e)
{
lastException = e;
}
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
if (lastException != null)
ThrowExceptionPreservingStack(lastException);
}
[ReflectionPermission(SecurityAction.Demand)]
static void ThrowExceptionPreservingStack(Exception exception)
{
FieldInfo remoteStackTraceString = typeof(Exception).GetField(
"_remoteStackTraceString",
BindingFlags.Instance | BindingFlags.NonPublic);
remoteStackTraceString.SetValue(exception, exception.StackTrace + Environment.NewLine);
throw exception;
}
}
我希望使用的东西。所以呢2.5.0.8322(Β1)'s RequiresSTAAttribute似乎理想的。它可以作独立的,但不是通过TeamCity,甚至当我试图以武力问题通过:
<NUnit Assemblies="Test\bin\$(Configuration)\Test.exe" NUnitVersion="NUnit-2.5.0" />
医生说道支持2.5.0alpha4?(http://www.jetbrains.net/confluence/display/TCD4/NUnit+for+MSBuild)
可能回答我自己的问题,2.5.0阿尔法4并没有RequiresSTAAttribute,因此亚军是没有履行我的属性...
解决方案
的TeamCity 4.0.1包含NUnit的2.5.0测试2.我相信应该这种情况下工作。
其他提示
你能看到,如果这有助于?经由.config文件的方法设置STA ...如在预NUnit的2.5
HTTP://madcoderspeak.blogspot .COM / 2008/12 /越来越-NUnit的到去-全sta.html
有关现在,我使用的:
private void ForceSTAIfNecessary(ThreadStart threadStart)
{
if (Thread.CurrentThread.GetApartmentState() == ApartmentState.STA)
threadStart();
else
CrossThreadTestRunner.RunInSTA(threadStart);
}
[Test]
public void TestRunApp()
{
ForceSTAIfNecessary(TestRunAppSTA);
}
public void TestRunAppSTA()
{
Assert.That(Thread.CurrentThread.GetApartmentState(), Is.EqualTo(ApartmentState.STA));
...
}
,而不是:
[RequiresSTA]
public void TestRunAppSTA()
{
Assert.That(Thread.CurrentThread.GetApartmentState(), Is.EqualTo(ApartmentState.STA));
...
}
不隶属于 StackOverflow