Comment 2 for bug 590970

Revision history for this message
Scott Hunter (shunter) wrote :

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.