Используя TeamCity, я пытаюсь получить тест (TestAutomationFX), для работы которого требуется поток STA.
Он работает через пользовательский app.config, который настраивает NUnit 2.4.x (8) (как упомянуто Гишу, спасибо, описано в 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;
}
}
Я надеюсь использовать что-то встроенное. Поэтому для NUnit 2.5.0.8322 (бета-версия 1) Требуется STAAttribute, кажется идеальным. Он работает автономно, но не через TeamCity, даже когда я пытаюсь решить проблему с помощью:
<NUnit Assemblies="Test\bin\$(Configuration)\Test.exe" NUnitVersion="NUnit-2.5.0" />
В документах сказано, что бегун поддерживает 2.5.0 alpha 4? (http://www.jetbrains.net/confluence/display/TCD4/NUnit+for+MSBuild)
Вероятно, отвечая на мой собственный вопрос, 2.5.0 Aplha 4 не имеет атрибута requireSTA, поэтому бегун не соблюдает мой атрибут ...