Nunit: возможно ли сделать тесты вложенными - PullRequest
13 голосов
/ 10 июня 2010

Я хочу протестировать один метод, который имеет высокую цикломатическую сложность (вздох), и я хотел бы иметь класс в тестовом классе, чтобы тестовый класс метода отображался как узел в дереве. Это возможно с 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 ]

18 голосов
/ 07 апреля 2013

Вы можете сделать это с помощью вложенных классов, очень похоже на пример кода в вашем вопросе.

Единственное отличие вашего кода в том, что внешнему классу не нужен атрибут [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 этот тестовый класс будет выглядеть следующим образом:

NUnit GUI

6 голосов
/ 06 апреля 2011

Я использовал (злоупотребил?) Пространства имен, чтобы получить это поведение:

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определить контекст для теста.

1 голос
/ 28 июля 2010

Похоже, у вас есть один класс, который вы хотите протестировать, но у вас есть два набора / типа тестов для запуска. Самый простой способ сделать это - создать два TestFixtures, по одному для каждого. Еще один способ сделать это - поместить каждый тест в категорию.

Редактировать: если все тесты выполняются по одному и тому же методу, можно использовать атрибут TestCase и указать параметры для каждого теста (а также ожидаемый результат.) Графический интерфейс будет вложенным каждый набор параметров TestCase под одним экземпляром этого имени теста. При этом предполагается, что все ваши тесты будут вести себя одинаково, что означает одинаковые базовые утверждения или ожидаемые исключения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...