我正在进行一些集成测试,在集成测试之前将数据加载到远程测试数据库中。然而,这是大量的数据,所以我宁愿在所有集成测试之前只做一次。
我已经让@BeforeClass/@AfterClass使用了@RunWith(Suite.class)和JUnitCore。runClasses()将所有测试类作为一个套件运行。然而,我一直在研究如何让Spring自动连接安装和拆卸所需的资源。例子:
public class AbstractTest {
@Autowired
private SessionFactory sf;
@BeforeClass
public static void setup() {
sf.getCurrentSession().createQuery("make tables");
}
}
但是sf总是空的,因为@BeforeClass需要从静态上下文中运行。我还尝试使用@ClassRule,如下所示:如何在多个测试类之间共享JUnit BeforeClass逻辑,但不做任何更改;
如何同时获得一组测试类的@BeforeClass/@AfterClass功能并在@BeforeClass/@AfterClass方法中拥有Autow的资源?让它也使用@Parameterize运行会更好。
SpringJUnit4ClassRunner在自动连线之前调用BeforeClass。上下文由调用BeforeClass方法后被注入的对象构造,但尚未注入。
from RunBeforeTestClassCallbacks :
public void evaluate() throws Throwable {
for (FrameworkMethod before : befores) { -- call for BeforeClass methods
before.invokeExplosively(target);
}
next.evaluate(); -- call DependencyInjectionTestExecutionListener
--where context is injected
}
您可以尝试这样做(而不是使用InitializingBean中的@BeforeClass use afterPropertiesSet-它是在调用ForeClass之前但在执行所有测试状态之前执行的)
public abstract class AbstractTest implements InitializingBean{
@Autowired
private SessionFactory sf;
//@BeforeClass
@Override
public void afterPropertiesSet() throws Exception {
sf.getCurrentSession().createQuery("make tables");
}
或
public abstract class AbstractTest {
private static SessionFactory sf;
@Autowired
public void setSessionFactory (SessionFactory sf){
AbstractTest.sf = sf;
setup();
}
//@BeforeClass
public static void setup() {
sf.getCurrentSession().createQuery("make tables");
}
}
在任何情况下,这都是一些解决方法,因为测试类是在spring上下文之前单元化的。
变体2,更新
@TestExecutionListeners(listeners = {AbstractTest.class, DependencyInjectionTestExecutionListener.class})
public class AbstractTest extends AbstractTestExecutionListener {
public static SessionFactory sf;
@BeforeClass
public static void setup() {
sf.getCurrentSession().createQuery("make tables");
}
@Override
public void beforeTestClass(TestContext testContext) throws Exception {
sf = testContext.getApplicationContext().getBean(SessionFactory.class);
super.beforeTestClass(testContext);
}
}
问题内容: 我的WEB-INF目录下有一些XML文件: lyricsBaseApp-servlet.xml hibernate.xml dataSource.xml beans.xml servlet xml导入其他xml文件: 我希望我的junit4 类包含整个spring配置。使用默认文件名,我创建了一个文件。最后,我不知道该放在哪里… 我试过了: 要么 和其他一些想法,但都失败了。有人可以指
问题内容: 在下面使用这种方法时,通过设置带有套件的jUnit。当每个Testclass中的所有@BeforeClass将在开始执行任何测试之前执行时,我们遇到了问题。(对于每个n个TestClass文件,@BeforeClass运行,然后在它们执行之后,它开始执行第一个MyTest.class文件@Test) 这将导致我们分配大量的资源和内存。我的想法是一定是错误的,每个@BeforeClass
问题内容: 我有一堆JUnit测试用例(集成测试),它们在逻辑上分为不同的测试类。 我们能够为每个测试类加载一次Spring应用程序上下文,然后将其重新用于JUnit测试类中的所有测试用例 但是,我们只是想知道是否有一种方法可以对一堆JUnit测试类仅加载一次Spring应用程序上下文。 FWIW,我们使用Spring 3.0.5,JUnit 4.5并使用Maven构建项目。 问题答案: 是的,这
嗨,我正试图让spring junit测试用例...我要求加载完整的应用程序上下文。但是,junit测试不会初始化完整的应用程序上下文。 因此,它应该扫描com.test包中的所有spring bean,并将它们加载到Junit TestCase的applicationcontext中。但从大豆的产量来看,它似乎没有做到这一点。
问题内容: 当前,我所有的JUnit测试都从一个通用的基类扩展而来,该基类提供了带有和标记的方法 -真正要做的就是设置一堆静态资源/服务以供测试使用。 由于某些原因,这对我来说似乎很尴尬: 根据我的理解,JUnit4的部分要点是我们不再需要这种经典的测试继承。 当我将这些测试作为套件的一部分而不是单独运行(我们经常这样做)时,多次调用和,从而减慢了测试的速度-我们实际上应该只调用一次 我想做的是以
我有一个通用代码库,需要用不同的实现和运行时配置进行测试。考虑使用多个DAO实现的服务。我有测试Dao接口的通用单元测试(需要Dao自动连接),我想从不同的项目中调用这些测试。 基本上我想要这样的东西。在共享的通用项目中,我的测试将有效。所以本质上,在共享项目中,我有我的测试,例如。 然后在实现Dao的其他项目中,我会: . 同样,有多个项目以不同的方式实现DAO层,我想分享通用测试。 如果我能将