Java – @ before method in testrule is not called
I implemented a JUnit 4 testrule (extending an externalresource) and injected it into my test class as a @ classrule: I want to initialize one resource for all tests in each test of this class and delete it finally
My question is that my @ before and @ after rule methods are not called before / after my @ test method: any idea why this happens?
Minimum compilable example:
package com.acme.test; import static org.junit.Assert.assertNull; import org.junit.ClassRule; import org.junit.Test; import org.junit.rules.ExternalResource; class Coffee { public void throwAway() {} } class CoffeeMachine extends ExternalResource { Coffee whatElse; @Override protected void before() throws Throwable { whatElse = new Coffee(); } @Override protected void after() { whatElse.throwAway(); } public Coffee gimmieCoffee() { return whatElse; } } public class CoffeeTester { @ClassRule public static CoffeeMachine CM = new CoffeeMachine(); @Test public void drinkACoffee() { Coffee c = CM.gimmieCoffee(); assertNull(c); // ---> Coffee is null!! (fuuuuuuuuuu...) } }
Is there anything I misunderstood here? Note that this can also happen with non - static @ rules
I'm using JUnit 4.11
Thank you very much for any hint
Solution
I think this is a problem for your test runner Maybe some plug-ins already have a custom runner installed and use it when you run tests from ecilpse?
Check the test run configuration and ensure that the standard JUnit 4 test run program is used: