nunit-core team mailing list archive
-
nunit-core team
-
Mailing list archive
-
Message #00571
[Bug 590970] Re: static TestFixtureSetUp/TestFixtureTearDown methods in base classes are not run
Well, the documentation for TestFixtureSetUp indicates that:
"TestFixtureSetUp methods may be either static or instance methods"
and also:
"The TestFixtureSetUp attribute is inherited from any base class.
Therefore, if a base class has defined a SetFixtureSetUp method, that
method will be called after each test method in the derived class."
(although the last sentence I've quoted from the documentation has a
typo, and seems to be copy/pasted incorrectly from the documentation for
TearDown.)
The problem comes in when both are combined, as in my example.
If you go back to my original example, but change the
TestBaseTestFixtureSetUp & TearDown methods to be non-static, you can
see that they do get inherited by the derived test and executed, without
any tests in the base, which is indeed what the documentation says is
supposed to happen:
TestBase TestFixtureSetUp
TestDerived TestFixtureSetUp
***** TestDerived.TestMethod
TestMethod
TestDerived TestFixtureTearDown
TestBase TestFixtureTearDown
As additional context, in JUnit, @BeforeClass methods must always be static, and the equivalent code works as expected there:
public class TestBase {
@BeforeClass
public static void testBaseBeforeClass() {
System.out.println("TestBase");
}
}
public class TestDerived extends TestBase {
@BeforeClass
public static void testDerivedBeforeClass() {
System.out.println("TestDerived");
}
@Test
public void testMethod() throws Exception {
System.out.println("testMethod");
}
}
Running testMethod() prints:
TestBase
TestDerived
testMethod
as expected.
--
static TestFixtureSetUp/TestFixtureTearDown methods in base classes are not run
https://bugs.launchpad.net/bugs/590970
You received this bug notification because you are a member of NUnit
Developers, which is subscribed to NUnit V2.
Status in NUnit V2 Test Framework: New
Bug description:
NUnit 2.5.5. Even though TestFixtureSetUp/TestFixtureTearDown methods can be static, if they are defined them in a base class, they won't be executed. From looking at the code, it seems like the problem is that the reflection code to find fixture setup/teardown methods does not search base classes.
To reproduce:
using System;
using NUnit.Framework;
public class TestBase
{
[TestFixtureSetUp]
public static void TestBaseTestFixtureSetUp()
{
Console.Out.WriteLine("TestBase TestFixtureSetUp");
}
[TestFixtureTearDown]
public static void TestBaseTestFixtureTearDown()
{
Console.Out.WriteLine("TestBase TestFixtureTearDown");
}
}
public class TestDerived : TestBase
{
[TestFixtureSetUp]
public static void TestFixtureSetUp()
{
Console.Out.WriteLine("TestDerived TestFixtureSetUp");
}
[TestFixtureTearDown]
public static void TestFixtureTearDown()
{
Console.Out.WriteLine("TestDerived TestFixtureTearDown");
}
[Test]
public void TestMethod()
{
Console.Out.WriteLine("TestMethod");
}
}
When you run this test, it only prints messages for the TestDerived class, not for TestBase.
Follow ups
References