I need to execute some piece of code before every JUnit test method. To execute this piece of code I use SpringTest class AbstractTestExecutionListener and its child TransactionContextTestExecutionListener.
This is code:
public class TransactionContextTestExecutionListener extends AbstractTestExecutionListener{
private static final Logger logger = Logger.getLogger(TransactionContextTestExecutionListener.class);
@Override
public void beforeTestMethod(TestContext testContext) throws Exception {
Object ctx = testContext.getApplicationContext().getBean(Context.class);
}
My JUnit class looks like:
@ContextConfiguration(locations = "classpath:/META-INF/spring-test/tests-context.xml")
@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners(TransactionContextTestExecutionListener.class)
@Transactional
public class SelectQueryBuilderTest {}
Problem is that beforeTestMethod method is only called before first executed
test method. It is not called before all of the rest ones.
Is problem in configuration? Any idea?
Thanks
I would suggest trying @Before. For example, consider creating a base class for your test:
And now you can write your test implementation as follows:
One of the benefits of this approach is that it encapsulates a lot of metadata in the base class, sparing you from having to duplicate it in all of your actual test classes.