Nunit:是否可以将测试显示为嵌套

时间:2010-06-10 14:07:50

标签: c# nunit

我想测试一个具有高圈复杂度(叹气)的方法,我希望在测试类中有一个类,以便方法测试类作为树中的节点出现。是否有可能与Nunit以及如何?

 MyEntityTests
 |
 L_ MyComplexMethodTests
    L when_some_condition_than
    L when_some_other_condition_than

[TestFixture]
public class MyEntityTests
{
  [TestFixture]
  public class MyComplexMethodTests
  {
    [Test]
     public void when_some_condition_than() {} 
   etc.....

  }
}

3 个答案:

答案 0 :(得分:18)

您可以使用嵌套类来完成它,与您问题中的示例代码非常相似。

您的代码的唯一区别是外部类不需要[TestFixture]属性,如果它仅用于结构并且本身没有测试。

您还可以让所有内部类共享一个Setup方法,方法是将它放入外部类并让内部类继承自外部类:

using NUnit.Framework;

namespace My.Namespace
{
    public class MyEntityTests
    {
        [SetUp]
        public void Setup()
        {
        }

        [TestFixture]
        public class MyComplexMethodTests : MyEntityTests
        {
            [Test]
            public void when_some_condition_than()
            {
            }

            [Test]
            public void when_some_other_condition_then()
            {
            }
        }
    }
}

在NUnit GUI中,此测试类将如下所示:

NUnit GUI

答案 1 :(得分:6)

我使用(滥用?)命名空间来获取此行为:

namespace MyEntityTests.MyComplexMethodTests
{
    [TestFixture]
    public class when_some_condition_than
    {
        [Test]
        public void it_should_do_something()
        {           
        }
    }

    [TestFixture]
    public class when_some_other_condition_than
    {
        [Test]
        public void it_should_do_something_else()
        {          
        }
    }
}

哪个会给你:

MyEntityTests
- MyComplexMethodTests
  - when_some_condition_than
    - it_should_do_something
  - when_some_other_condition_than
    - it_should_do_something_else

在这种情况下,我通常会使用TestFixture来定义测试的上下文。

答案 2 :(得分:1)

听起来您要测试一个类,但是要运行两组/类型的测试。最简单的方法可能是创建两个TestFixtures,每个一个。另一种方法是将每个测试放入一个类别。

编辑:如果所有测试都使用相同的方法,则一个选项是使用TestCase属性并指定每个测试的参数(以及预期结果).GUI将嵌套每个集合TestCase参数在该测试名称的单个实例下。这假设您的所有测试都表现相似,这意味着相同的基本Asserts或ExpectedExceptions。