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:
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 TestBaseTestFix tureSetUp & 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 TestMethod
TestDerived TestFixtureSetUp
***** TestDerived.
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 { lass() { out.println( "TestBase" );
@BeforeClass
public static void testBaseBeforeC
System.
}
}
public class TestDerived extends TestBase { reClass( ) { out.println( "TestDerived" );
@BeforeClass
public static void testDerivedBefo
System.
}
@Test out.println( "testMethod" );
public void testMethod() throws Exception {
System.
}
}
Running testMethod() prints:
TestBase
TestDerived
testMethod
as expected.