如何在运行时从单元测试中获取单元测试方法名称?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (11)

如何从单元内部测试中获取单元测试名称?

在BaseTestFixture类中有以下方法:

public string GetCallerMethodName()
{
    var stackTrace = new StackTrace();
    StackFrame stackFrame = stackTrace.GetFrame(1);
    MethodBase methodBase = stackFrame.GetMethod();
    return methodBase.Name;
}

我的测试夹具类继承自基类:

[TestFixture]
public class WhenRegisteringUser : BaseTestFixture
{
}

我有以下系统测试:

[Test]
public void ShouldRegisterThenVerifyEmailThenSignInSuccessfully_WithValidUsersAndSites()
{
    string testMethodName = this.GetCallerMethodName();
    //
}

当我在VisualStudio中运行它时,它会按预期返回我的测试方法名。

当它在TeamCity运行时,_InvokeMethodFast()返回,该方法似乎是TeamCity在运行时生成的供其自己使用的方法。

那么,如何在运行时获得测试方法名呢?

提问于
用户回答回答于

如果你用NUnit 2.5.7/2.6

可以使用TestContext类:

[Test]
public void ShouldRegisterThenVerifyEmailThenSignInSuccessfully()
{
    string testMethodName = TestContext.CurrentContext.Test.Name;
}
用户回答回答于

使用VisualStudio运行测试时,添加TestContext属性

[TestClass]
public class MyTestClass
{
    public TestContext TestContext { get; set; }

    [TestInitialize]
    public void setup()
    {
        logger.Info(" SETUP " + TestContext.TestName);
        // .... //
    }
}

扫码关注云+社区