什么是使用JUnit @BeforeClass和Spring @TestExecutionListener beforeTestClass(的TestContext的TestContext) “钩子” 之间的区别? 如果是有区别的,这什么情况下使用哪一个?
Maven依赖关系:
弹簧核心:3.0.6.RELEASE
弹簧上下文:3.0.6.RELEASE
弹簧试验:3.0.6.RELEASE
弹簧数据公共核心:1.2.0.M1
弹簧数据的mongodb:1.0.0.M4
蒙戈的Java驱动程序:2.7.3
JUnit的:4.9
CGLIB:2.2
使用JUnit @BeforeClass注释:
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.Assert;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
@ContextConfiguration(locations = { "classpath:test-config.xml" })
public class TestNothing extends AbstractJUnit4SpringContextTests {
@Autowired
PersonRepository repo;
@BeforeClass
public static void runBefore() {
System.out.println("@BeforeClass: set up.");
}
@Test
public void testInit() {
Assert.assertTrue(repo.findAll().size() == 0 );
}
}
=> @BeforeClass: set up.
=> Process finished with exit code 0
使用弹簧钩:
(1)重写beforeTestClass(TextContext的TestContext):
import org.springframework.test.context.TestContext;
import org.springframework.test.context.support.AbstractTestExecutionListener;
public class BeforeClassHook extends AbstractTestExecutionListener {
public BeforeClassHook() { }
@Override
public void beforeTestClass(TestContext testContext) {
System.out.println("BeforeClassHook.beforeTestClass(): set up.");
}
}
(2)使用@TestExecutionListeners注释:
import org.springframework.test.context.TestExecutionListeners;
// other imports are the same
@ContextConfiguration(locations = { "classpath:test-config.xml" })
@TestExecutionListeners(BeforeClassHook.class)
public class TestNothing extends AbstractJUnit4SpringContextTests {
@Autowired
PersonRepository repo;
@Test
public void testInit() {
Assert.assertTrue(repo.findAll().size() == 0 );
}
}
=> BeforeClassHook.beforeTestClass(): set up.
=> Process finished with exit code 0