首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在TeamCity 4中使用NUnit-2.5 RequiresSTAAttribute

在TeamCity 4中使用NUnit-2.5 RequiresSTAAttribute
EN

Stack Overflow用户
提问于 2008-12-05 11:06:36
回答 3查看 1.1K关注 0票数 2

使用TeamCity,我试图获得一个需要STA线程才能运行的(TestAutomationFX)测试。

它通过一个自定义的app.config来配置NUnit 2.4.x (8) (如Gishu所述,谢谢,在http://madcoderspeak.blogspot.com/2008/12/getting-nunit-to-go-all-sta.html中描述)

它通过以下方式工作:

代码语言:javascript
复制
/// <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 (Beta1)的RequiresSTAAttribute似乎很理想。它可以独立工作,但不能通过TeamCity,即使我试图通过:

代码语言:javascript
复制
<NUnit Assemblies="Test\bin\$(Configuration)\Test.exe" NUnitVersion="NUnit-2.5.0" />

文档说runner支持2.5.0 alpha 4?(http://www.jetbrains.net/confluence/display/TCD4/NUnit+for+MSBuild)

可能是回答了我自己的问题,2.5.0Aplha4没有RequiresSTAAttribute,因此runner没有使用我的属性……

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2008-12-29 11:55:14

TeamCity 4.0.1包含NUnit 2.5.0 beta 2,我相信它应该适用于这种情况。

票数 1
EN

Stack Overflow用户

发布于 2008-12-05 11:13:08

你能看看这是否有帮助吗?通过.config文件方法设置STA...与NUnit 2.5之前的版本相同

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

票数 0
EN

Stack Overflow用户

发布于 2008-12-05 11:39:23

现在,我使用:

代码语言:javascript
复制
    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));
        ...
    }

而不是:

代码语言:javascript
复制
    [RequiresSTA]
    public void TestRunAppSTA()
    {
        Assert.That(Thread.CurrentThread.GetApartmentState(), Is.EqualTo(ApartmentState.STA));
        ...
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/343521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档