`
Thorndike
  • 浏览: 11115 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Spring2.5.X与Junit4.5配搭问题

    博客分类:
  • SSH
阅读更多
新项目中,使用Maven来构建开发环境.Spring版本选择2.5.5,Junit版本选择4.5.

<properties>
	<spring.version>2.5.5</spring.version>
	<junit.version>4.5</junit.version>
</properties>


在测试service类时报错.

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"/applicationContext-test.xml"})
public final class UserManagerTests{
        @Test(expected=EmailAlreadyExistException.class)
	public void testEmailAlreadyExistException() throws EmailAlreadyExistException{
		userManager.register(user3);
		fail();
	}
}


错误为

org/junit/Assume$AssumptionViolatedException; nested exception is java.lang.NoClassDefFoundError: org/junit/Assume$AssumptionViolatedException

百思不得其解,然后就翻Google,后来Spring的jira中翻到,原来Spring 2.5 branch中是使用得junit 4.4.同时Spring 2.5 branch已经处于静止状态,不会在更新了.

引用

I'm afraid we can't move to JUnit 4.5+ in the Spring 2.5.x branch. However, in the upcoming Spring 3.0 branch, we'll build on JUnit 4.5.

Well, the 2.5 branch entered strict maintenance mode last week. While we are in principle still able to support new versions of third-party dependencies, we can't raise the minimum level unless the previously supported version was pre-release software. Unfortunately it seems that supporting JUnit 4.5 here means requiring JUnit 4.5+; we can't do that before Spring 3.0 since all sorts of present build and development environments have JUnit 4.4 baked into them. It's unpleasant but not our fault - there was no better way of doing the test context framework against the hard-to-extend JUnit 4.4.

Juergen


Henrik在jira给出的解决方案是下载junit-4.5.jar替换spring/lib/junit/junit-4.4.jar,然后让SpringJUnit4ClassRunner继承junit4.5的新类org.junit.runners.BlockJUnit4ClassRunner.

引用

On top of the patch - make sure you also replace the old spring/lib/junit/junit-4.4.jar with the new junit-4.5.jar, which can be downloaded here:
http://sourceforge.net/project/showfiles.php?group_id=15278&package_id=12472

The patch offers a solution where SpringJUnit4ClassRunner extends the new JUnit4.5 class "BlockJUnit4Runner", which offers much better possibilities for extension and reuse than the old class JUnit4ClassRunner, which have been deprecated.

This also means that backward-compability to JUnit-4.4 is broken but I think it is worth it. Its default class-runner JUnit4ClassRunner was not really supposed to be extended the way SpringJUnit4ClassRunner did it. (Not that there was any good alternative but still ...) Also, by switching to JUnit-4.5 the classes SpringTestMethod and SpringMethodRoadie can be removed.


新建一个BlockJUnit4ClassRunner的子类,取名叫作SpringJUnit45ClassRunner,代码如下:


import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.runners.model.InitializationError;
import org.junit.runners.BlockJUnit4ClassRunner;

import org.springframework.test.context.TestContextManager;

public class SpringJUnit45ClassRunner extends BlockJUnit4ClassRunner {

	private static final Log logger = LogFactory.getLog(SpringJUnit45ClassRunner.class);

	private final TestContextManager testContextManager;

	public SpringJUnit45ClassRunner(Class<?> clazz) throws InitializationError {
		super(clazz);
		if (logger.isDebugEnabled()) {
			logger.debug("SpringJUnit45ClassRunner constructor called with [" + clazz + "].");
		}
		this.testContextManager = createTestContextManager(clazz);
	}

	protected Object createTest() throws Exception {
		Object testInstance = super.createTest();
		getTestContextManager().prepareTestInstance(testInstance);
		return testInstance;
	}

	protected TestContextManager createTestContextManager(Class<?> clazz) {
		return new TestContextManager(clazz);
	}

	protected final TestContextManager getTestContextManager() {
		return this.testContextManager;
	}

}



记得要把pom.xml里junit和spring-test的<scope>test</scope>干掉.

然后修改测试类的RunWith为新类.

@RunWith(SpringJUnit45ClassRunner.class)


测试通过了.这样Spring2.5.X与Junit4.5应该不会再有问题了.
分享到:
评论
5 楼 asael 2009-07-01  
kjj 写道
注意spring2.5.6的,需要junit 升级到4.6 !!

仍然会有问题,看下面这个简单的测试用例:
@Test
public void fun(){
	int a = 10/0;
	System.out.println(a);
}

在控制台会报这个错误,java.lang.NoClassDefFoundError: org/junit/Assume$AssumptionViolatedException.但是这个错误明显不是我们想看到的.按楼主的方式修改,也有个问题,就是对数据库没法回滚,即使设置了@Rollback也没用,没有看junit4.4~junit4.6的change log,不清楚这三个版本间升级了什么内容,不过对我们来说,降级使用Junit4.4是最好的选择了,毕竟spring的2.5系列已经不再更新了.
4 楼 kjj 2009-06-10  
注意spring2.5.6的,需要junit 升级到4.6 !!
3 楼 susam 2009-06-09  
还是有一个问题请教楼主: 我使用了你给出的Runner, 但事务不会回滚! 使用默认的Runner虽然有这个异常, 但我看到事务回滚.
TransactionalTestExecutionListener - Rolled back transaction after test execution for test context
2 楼 bcw104 2009-03-28  
我们也是遇到了同样的问题,把版本改加junit4.4了,
顺便问题一下,你的applicationContext-test.xml文件是怎么引用其他spring配置文件的?
我们的配置文件在WEB-INF/Spring/下面,有点麻烦
1 楼 fangzhouxing 2009-03-01  
正好遇到这个问题,非常感谢!!!

相关推荐

    Spring2.5.rar

    5.测试支持:Spring 2.5提供了JUnit和Mockito的集成,便于进行单元测试和集成测试。 总结,Spring 2.5作为Spring框架的一个重要里程碑,它的改进和特性为Java开发者带来了更加高效、灵活的开发体验。通过深入理解并...

    Struts2开发常用jar包

    包含struts2-core-2.5.10.1.jar,struts2-jfreechart-plugin-2.5.10.1.jar,struts2-json-plugin-2.5.10.1.jar,struts2-junit-plugin-2.5.10.1.jar,struts2-bean-validation-plugin-2.5.10.1.jar,struts2-cdi-...

    Junit4.5.rar

    在这个“Junit4.5.rar”压缩包中,包含了两个文件:junit-4.5.jar和junit_license.txt。 junit-4.5.jar文件是JUnit4.5的核心库,包含了大量的类和接口,使得开发者能够轻松地为自己的Java代码编写测试。这个库包含...

    junit4.5.zip

    在实际项目中,Junit4.5经常与其他工具结合使用,如Mockito用于模拟对象,提供隔离的测试环境;或者与持续集成服务器如Jenkins配合,自动化测试流程,保证代码质量。 总之,Junit4.5作为一个强大的单元测试框架,极...

    Spring4.X教学视频

    学习如何使用Mockito、Spring Test和JUnit进行测试是非常重要的。 9. **Spring Batch**:对于批量处理任务,Spring Batch提供了一个全面的解决方案。视频可能会介绍如何配置批处理作业和步骤。 10. **Spring Cloud...

    eclipse搭建spring2.5

    在新建项目的配置中,确保JRE版本与Spring 2.5兼容。点击"Next",在"Libraries"选项卡下,点击"Add External JARs...",选择之前导入的Spring库jar文件,然后点击"Finish"。 3. **配置Spring项目**:创建一个名为`...

    Spring 3.x企业应用开发实战.rar

    9. **测试工具**:Spring 3.x提供了丰富的单元测试和集成测试支持,包括`@RunWith(SpringJUnit4ClassRunner.class)`和`@ContextConfiguration`等注解,简化了测试编写。 通过阅读《Spring 3.x企业应用开发实战》,...

    com.springsource.org.junit-4.7.0.jar

    com.springsource.org.junit-4.7.0.jar 需要的下载啊

    JUnit4.5和官方文档

    JUnit4.5是Java开发中广泛使用的单元测试框架,它为开发者提供了编写和运行可重复、可靠的测试用例的能力。这个版本的JUnit引入了许多新特性,增强了测试的灵活性和效率。下面将详细介绍JUnit4.5及其核心概念和功能...

    Spring3.X企业应用开发实战pdf扫描版+源码光盘

    8. **Spring Test**:Spring3.X提供了丰富的测试支持,包括`@RunWith(SpringJUnit4ClassRunner.class)`和`@ContextConfiguration`等注解,简化了单元测试和集成测试的编写。 9. **Asynchronous Processing**:...

    (java常用工具jar组合)c3p0-0.9.1.2.bin+jackson 2.82+JSTL-jar+junit4.4.jar+gson-2.5.jar

    其核心组件包括`ObjectMapper`,用于对象与JSON之间的转换,以及`JsonParser`和`JsonGenerator`,用于低级别解析和生成JSON。 3. **JSTL-jar**: JSP Standard Tag Library(JSTL)是一个标准的标签库,用于简化JSP...

    使用 Spring 2.5 TestContext 测试框架

    在Spring框架中,TestContext模块为开发者提供了强大的测试支持,特别是在Spring 2.5版本中,这个测试框架进一步增强了测试的便利性和可扩展性。它允许我们以声明式的方式配置和管理测试环境,包括bean的初始化、...

    Spring3.X编程技术与应用

    Spring Test框架与JUnit和TestNG等测试库协同工作,允许开发者在测试期间使用完整的Spring环境,包括自动装配、事务管理等特性,简化了测试的复杂性。 以上仅是对Spring3.X编程技术与应用的一些概览,实际上在使用...

    junit的jar包

    junit.extensions.ActiveTestSuite.class junit.extensions.RepeatedTest.class junit.extensions.TestDecorator.class junit.extensions.TestSetup.class junit.extensions.package-info.class junit.framework....

    Spring2.5-中文参考手册chm.zip

    8. **测试支持**:Spring 2.5提供了更完善的测试工具,如`@RunWith(SpringJUnit4ClassRunner.class)`和`@ContextConfiguration`注解,使得基于Spring的应用测试更加便捷。 9. **集成其他框架**:Spring 2.5加强了与...

    Spring4.x最新jar包

    5. **测试**:Spring提供了测试模块,支持单元测试和集成测试,可以方便地与JUnit等测试框架结合使用。 在Spring 4.x版本中,有以下关键改进和新特性: 1. **Java 8支持**:Spring 4.x全面支持Java 8,包括Lambda...

    struts-2.5.14.1-apps struts2官方例程

    4. **模型驱动(Model Driven)**:理解模型驱动的概念,如何将Action类与业务对象绑定,简化Action代码。 5. **动态方法访问(Dynamic Method Invocation,DMI)**:了解如何启用DMI,允许Action方法名通过URL动态...

    spring 3.x实战开发源码

    在本项目中,我们主要关注的是"spring 3.x实战开发源码",这涉及到Spring框架的高级应用,包括Spring MVC、MyBatis以及单元测试等核心知识点。下面将详细阐述这些主题,并结合"chapter12"和"chapter2"这两个源代码...

    Junit4.5.jar

    单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件下某个特定函数的行为。其实我们每天都在做单元测试。

    test.junit-4.5.jar和test.junit-4.5-sources.jar

    单元测试所需的junit jar包,里面包含class jar 和源码jar,JUnit 是JAVA语言事实上的标准测试库。JUnit 4是三年以来最具里程碑意义的一次发布。它的新特性主要是针对JAVA5中的标记(annotation)来简化测试,而不是...

Global site tag (gtag.js) - Google Analytics