Issue
I have started testing and now i want to use @After
, @Before
and @Test
but my application only runs the @Before
method and gives output on console
before
However, if I remove @After
and @Before
it runs the @Test. My code is here:
public class TestPractise extends AbstractTransactionalDataSourceSpringContextTests{
@Before
public void runBare(){
System.out.println("before");
}
@Test
public void testingMethod(){
System.out.println("testing");
}
@After
public void setDirty(){
System.out.println("after");
}
}
Why aren't @After
, @Test
and @before
working simultaneously?
Solution
The AbstractTransactionalDataSourceSpringContextTests
class forces the use of the old JUnit 3.x syntax, which means that any of the JUnit 4 annotation will not work.
Your method runBare()
is executed not because of the @Before
annotation, but because it is named runBare()
, which is a method provided by ConditionalTestCase
and JUnit TestCase
class.
So you have 2 solutions:
- Use the AlexR answer to use JUnit 4 tests and Spring;
- Keep your inheritance of
AbstractTransactionalDataSourceSpringContextTests
, but use theonSetUp
andonTearDown
methods instead of the@Before
and@After
methods.
Answered By - Romain Linsolas
Answer Checked By - Willingham (JavaFixing Volunteer)