【问题标题】:How to access the NUnit test name programmatically?如何以编程方式访问 NUnit 测试名称?
【发布时间】:2011-04-05 01:08:06
【问题描述】:

是否有一些全局状态可以访问当前运行的测试名称?

我有测试将文件输出到一个目录中并将它们读回。我希望每个测试都创建一个目录来播放,然后自行清理,我不想将该名称推入 (我必须让它独一无二,然后确保每个测试都保持独一无二;ew)。我可以使用 GUID,但我希望辅助方法能够假设“这是应该存储测试文件的地方”,而不必将该 GUID 推送给它们。同样,这预示着某个地方的全球状态。

基本上,我想要一个像TestRunner.Current.CurrentTest.Name 这样的电话。有这种事吗?

【问题讨论】:

    标签: nunit naming


    【解决方案1】:

    如果我们使用 TestCaseSource 标签,那么上述解决方案可能无法给出正确答案

    尝试使用 TestContext.CurrentContext.Test.MethodName

    按照以下示例进行操作

    namespace NunitTests
    {
    public class Class1
    {
    
    static List<TestData> Data = new List<TestData>()
            {
                new TestData()
                {
                    ...
                }
            };
    
    [Test]
            [TestCaseSource(nameof(TenMBInstance))]
            public void TestCase(TestData value)
            {
                TestContext.CurrentContext.Test.Name; //TestCase(NunitTests..TestData) 
                TestContext.CurrentContext.Test.MethodName; //TestCase
            }
    }
    }
    

    【讨论】:

      【解决方案2】:

      (假设 c#)

      NUnit.Framework.TestContext.CurrentContext.Test.Name 
      

      NUnit.Framework.TestContext.CurrentContext.Test.FullName
      

      或者如果你真的很懒并且没有使用 TestCaseSource 来驱动你的测试(感谢@aolszowka):

      this.GetType().ToString()
      

      【讨论】:

      • 这个本来是建议用 this.GetType().ToString() 如果你比较懒;但是,这不适用于 TestCaseSource 驱动的测试,您必须使用 TestContext 中的两个重载之一才能在所有场景中工作。
      • @aolszowka 为什么您删除该行而不是在您的编辑中添加该信息?
      • @aolszowka 但这与您所做的相反。您已删除帖子中的信息并在您的评论中替换它。
      【解决方案3】:

      我自己还没有升级到 2.5.7,但它包含一个 TestContext 类,它似乎提供了你正在寻找的东西:http://www.nunit.org/index.php?p=releaseNotes&r=2.5.7

      【讨论】:

      • 这很好用。我使用正则表达式去除在目录名称中不起作用的任何字符,这一切都很好。谢谢!
      • 要在代码中使用它,通过调用静态 CurrentContext 方法获取 TestContext。因此,例如:TestContext.CurrentContext.Test.Name
      • 更新了 NUnit 3 的文档:github.com/nunit/docs/wiki/TestContext
      【解决方案4】:

      假设每个测试有一个方法,在您的 NUnit 代码中,您可以使用反射从堆栈跟踪中获取方法名称。

      如果您在 NUnit 代码中编写由其他方法调用的辅助方法来执行此文件记录,则可以使用此语法检查 上一个方法

      string MethodName = new StackFrame(1).GetMethod().Name;
      

      更多详情请查看question 44153, "Can you use reflection to find the name of the currently executing method?" 的答案。

      【讨论】:

      • 这不会处理被多次调用的 [TestCase] 方法,但它足够接近让您获得代表。
      猜你喜欢
      • 1970-01-01
      • 2011-05-04
      • 2014-12-10
      • 2017-07-09
      • 1970-01-01
      • 2011-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多