我正在尝试根据特定方案将单元测试类划分为逻辑分组。但是,我需要有一个TestFixtureSetUp
和TestFixtureTearDown
来运行整个测试。基本上我需要做这样的事情:
[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
}
}
在这种情况下,我在_foo
上得到一个NullReferenceException,大概是因为在执行内部类之前调用了TearDown。
如何达到预期的效果(测试范围)?是否有一个扩展或NUnit的东西,我可以使用,这将有所帮助?我宁愿坚持使用NUnit,也不要使用像SpecFlow这样的东西。
答案 0 :(得分:7)
您可以为测试创建一个抽象基类,在那里完成所有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);
}
}