2012-06-12 5 views
4

Я пытаюсь разбить единый тестовый класс на логические группы на основе определенного сценария. Однако мне нужно иметь TestFixtureSetUp и TestFixtureTearDown, которые будут работать для всего теста. В принципе мне нужно сделать что-то вроде этого:Создание вложенных классов TestFixture с помощью NUnit

[TestFixture] 
class Tests { 
    private Foo _foo; // some disposable resource 

    [TestFixtureSetUp] 
    public void Setup() { 
     _foo = new Foo("VALUE"); 
    } 

    [TestFixture] 
    public class Given_some_scenario { 
     [Test] 
     public void foo_should_do_something_interesting() { 
      _foo.DoSomethingInteresting(); 
      Assert.IsTrue(_foo.DidSomethingInteresting); 
     } 
    } 

    [TestFixtureTearDown] 
    public void Teardown() { 
     _foo.Close(); // free up 
    } 
} 

В этом случае я получаю NullReferenceException на _foo предположительно потому, что Teardown который вызывается перед внутренним классом выполняется.

Как достичь желаемого эффекта (обзор тестов)? Есть ли расширение или что-то в NUnit, которое я могу использовать, это поможет? Я бы предпочел придерживаться NUnit в это время и не использовать что-то вроде SpecFlow.

ответ

6

Вы можете создать абстрактный базовый класс для своих тестов, выполните все задания Setup и Teardown. Затем ваши сценарии наследуются от этого базового класса.

[TestFixture] 
public abstract class TestBase { 
    protected Foo SystemUnderTest; 

    [Setup] 
    public void Setup() { 
     SystemUnterTest = new Foo("VALUE"); 
    } 

    [TearDown] 
    public void Teardown() { 
     SystemUnterTest.Close(); 
    } 
} 

public class Given_some_scenario : TestBase { 
    [Test] 
    public void foo_should_do_something_interesting() { 
     SystemUnderTest.DoSomethingInteresting(); 
     Assert.IsTrue(SystemUnterTest.DidSomethingInteresting); 
    } 
} 
+1

Но нет способа вложить другой класс под этот класс «Given_some_scenario»? Идея заключалась в том, чтобы охватывающий класс относился ко всему разделу (например, «CustomerTests»), а затем имел каждый подкласс для отдельного сценария (например, «When_searching_customers') –

+0

Почему бы не группировать иерархическую структуру с использованием наследования? 'When_searching_customers: CustomerTestBase',' When_creating_a_customer: CustomerTestBase' и т. Д.? –

+0

Это может сработать, теперь, когда я думаю об этом! Благодаря! –

Смежные вопросы