代码之家  ›  专栏  ›  技术社区  ›  Billy ONeal IS4

使用NUnit-如何获取当前正在执行的测试装置和名称?

  •  3
  • Billy ONeal IS4  · 技术社区  · 14 年前

    class TestHelper
    {
        string CurrentTestFixture;
        string CurrentTest;
        public TestHelper()
        {
            var callingFrame = new StackFrame(1);
            var method = callingFrame.GetMethod();
            CurrentTest = method.Name;
            var type = method.DeclaringType;
            CurrentTestFixture = type.Name;
        }
        public void HelperMethod()
        {
            var relativePath = Path.Combine(CurrentTestFixture, CurrentTest);
            Directory.Delete(Path.Combine(Configurator.LogPath, relativePath));
        }
    }
    
    [TestFixture]
    class Fix
    {
        [Test]
        public void MyTest()
        {
            var helper = new TestHelper();
            //Do other testing stuff
            helper.HelperMethod();
        }
        [Test]
        public void MyTest2()
        {
            var helper = new TestHelper();
            //Do some more testing stuff
            helper.HelperMethod();
        }
    }
    

    这很管用,只是有些情况下我想让TestHelper类成为我的fixture的一部分,比如:

    [TestFixture]
    class Fix
    {
        private TestHelper helper;
    
        [Setup]
        public void Setup()
        {
            helper = new TestHelper();
        }
    
        [TearDown]
        public void TearDown()
        {
            helper.HelperMethod();
        }
    
        [Test]
        public void MyTest()
        {
            //Do other testing stuff
        }
        [Test]
        public void MyTest2()
        {
            //Do some more testing stuff
        }
    }
    

    我不能简单地将这个类变成一个全局的fixture,因为有时单个测试会多次使用它,有时一个测试根本不需要使用它。有时测试需要将特定属性附加到TestHelper。。。。诸如此类的事情。

    因此,我希望能够以某种方式获得当前正在执行的测试,而不必在我正在查看的几千个测试用例中手动重复fixture和test的名称。

    有没有办法得到这样的信息?

    3 回复  |  直到 14 年前
        1
  •  4
  •   Pedro    14 年前

    NUnit 2.5.7 添加了一个“实验性”TestContext类。它包含的属性之一是TestName。我还没试过,所以我不知道这个信息在拆卸方法中是否可用。

        2
  •  0
  •   Jorge Ferreira    14 年前

    TestHelper 构造函数到 HelperMethod 会帮你吗?

    class TestHelper
    {
        public void HelperMethod()
        {
            string CurrentTestFixture;
            string CurrentTest;
    
            var callingFrame = new StackFrame(1);
            var method = callingFrame.GetMethod();
            CurrentTest = method.Name;
            var type = method.DeclaringType;
            CurrentTestFixture = type.Name;
    
            var relativePath = Path.Combine(CurrentTestFixture, CurrentTest);
            Directory.Delete(Path.Combine(Configurator.LogPath, relativePath));
        }
    }
    
        3
  •  0
  •   aqwert    14 年前

    从外观上看,您不能这样做,因为设置和拆卸点的堆栈帧不包括测试方法。

    1. 您可以实现IDisposable来进行清理

      [Test]
      public void MyTest()
      {
          using(new TestHelper())
          {
              ... test goes here ...
          }
      }
      
    2. 或使用 PostSharp 将上述代码作为测试方法属性的一部分进行编织。

      [Test, TestHelper]
      public void MyTest()
      {
         ...
      }
      

    固定格式。添加了IDisposable