代码之家  ›  专栏  ›  技术社区  ›  Paul Mendoza

在NUnit测试期间的teardown事件中,如何获取应用于刚刚测试的方法的属性?

  •  2
  • Paul Mendoza  · 技术社区  · 16 年前

    在测试的拆卸过程中,我希望能够访问此信息。我怎样才能从服务器上访问它 [TearDown]

    4 回复  |  直到 8 年前
        1
  •  2
  •   Paul Sonier    16 年前

    我不认为有一个很好的方法内置到nunit中,但这不是一个很难解决的问题。只需将测试包装在try/catch块中,捕获任何异常,并将它们(以及测试名称)保存到测试类中的私有成员变量中。然后,您就可以通过您的拆卸方法进行访问。

        2
  •  2
  •   Karel Frajták    6 年前

    您可以在测试分解方法中访问文本上下文对象

    [TearDown]
    public void TestTearDown()
    {
      // inc. class name
      var fullNameOfTheMethod = NUnit.Framework.TestContext.CurrentContext.Test.FullName; 
      // method name only
      var methodName = NUnit.Framework.TestContext.CurrentContext.Test.Name;
      // the state of the test execution
      var state = NUnit.Framework.TestContext.CurrentContext.Result.State; // TestState enum
    }
    

    我不知道哪个版本是第一个支持它的,但我的版本是24。

        3
  •  1
  •   dkl    14 年前

    另一个解决方案是使用模板方法并使用此方法运行所有测试。例如:

    // template method
    void Execute(Action test)
    {
        try
        {
            test();
        }
        catch (Exception e)
        {
            // handle exception here
            throw;
        }
    }
    
    [Test]
    public void Test()
    {
        Execute(() =>
            {
                // your test here
            });
    }
    

    当您的测试使用一些资源时,此模式特别有用,这些资源必须在测试之前初始化,并在测试之后释放(例如临时文件)。在这种情况下,可以在测试委托中使用类型参数。

    另一个优点是,您可以轻松地让测试在不同的线程上运行,使用不同的区域性等。

    缺点很明显:它迫使您在每次测试中使用lambda方法。

        4
  •  -1
  •   Tasos K. Sagar Jaybhay    8 年前

    我想你做不到。或者更确切地说,我不知道你能做到。我处理这种需求的方法是在特定测试中使用try/catch,对异常执行我想要的操作,然后在catch块中再次抛出,这样测试可能会失败。

    try{
        // do something that can potentially throw;
    }
    catch(Exception ex){
        // do something interesting with the ex;
        throw;
    }
    

    备选案文2: 如果您还没有走得太远,您可能希望使用xUnit,它有一个不同的异常预期模型,并且可能提供一些您正在寻找的控件。