Frage

Mit Teamcity, Ich versuche, einen (TestAutomationFX) Test zu erhalten, die einen STA-Thread erfordert auszuführen.

Es funktioniert über eine benutzerdefinierte app.config, die NUnit 2.4.x konfiguriert (8) (im Sinne von Gishu, danke, unter http://madcoderspeak.blogspot.com/2008/12/getting-nunit-to-go-all-sta.html )

Es funktioniert über:

/// <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;
    }
}

Ich hoffe, in etwas gebaut zu verwenden. So NUnit 2.5.0.8322 (Beta 1) 's RequiresSTAAttribute ideal zu sein scheint. Es funktioniert eigenständige, aber nicht über Teamcity, auch wenn ich versuche, das Problem zu zwingen, über:

<NUnit Assemblies="Test\bin\$(Configuration)\Test.exe" NUnitVersion="NUnit-2.5.0" />

Die docs sagen, dass die Läufer unterstützt 2.5.0 alpha 4? ( http://www.jetbrains.net/confluence/display/TCD4 / NUnit + für + MSBuild )

Wahrscheinlich meine eigene Frage zu beantworten, 2.5.0 Aplha 4 muß nicht RequiresSTAAttribute, daher ist der Läufer mein Attribut nicht ehrt ...

War es hilfreich?

Lösung

Teamcity 4.0.1 enthält NUnit 2.5.0 beta 2. Ich glaube, dass für diesen Fall funktionieren soll.

Andere Tipps

Können Sie sehen, ob das hilft? Einstellen STA über die CONFIG-Datei Ansatz ... wie in pre NUnit 2.5

http: //madcoderspeak.blogspot .com / 2008/12 / getting-nunit-to-go-all-sta.html

Im Moment benutze ich:

    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));
        ...
    }

statt:

    [RequiresSTA]
    public void TestRunAppSTA()
    {
        Assert.That(Thread.CurrentThread.GetApartmentState(), Is.EqualTo(ApartmentState.STA));
        ...
    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top