新项目中,使用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.测试支持:Spring 2.5提供了JUnit和Mockito的集成,便于进行单元测试和集成测试。 总结,Spring 2.5作为Spring框架的一个重要里程碑,它的改进和特性为Java开发者带来了更加高效、灵活的开发体验。通过深入理解并...
包含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”压缩包中,包含了两个文件:junit-4.5.jar和junit_license.txt。 junit-4.5.jar文件是JUnit4.5的核心库,包含了大量的类和接口,使得开发者能够轻松地为自己的Java代码编写测试。这个库包含...
在实际项目中,Junit4.5经常与其他工具结合使用,如Mockito用于模拟对象,提供隔离的测试环境;或者与持续集成服务器如Jenkins配合,自动化测试流程,保证代码质量。 总之,Junit4.5作为一个强大的单元测试框架,极...
学习如何使用Mockito、Spring Test和JUnit进行测试是非常重要的。 9. **Spring Batch**:对于批量处理任务,Spring Batch提供了一个全面的解决方案。视频可能会介绍如何配置批处理作业和步骤。 10. **Spring Cloud...
在新建项目的配置中,确保JRE版本与Spring 2.5兼容。点击"Next",在"Libraries"选项卡下,点击"Add External JARs...",选择之前导入的Spring库jar文件,然后点击"Finish"。 3. **配置Spring项目**:创建一个名为`...
9. **测试工具**:Spring 3.x提供了丰富的单元测试和集成测试支持,包括`@RunWith(SpringJUnit4ClassRunner.class)`和`@ContextConfiguration`等注解,简化了测试编写。 通过阅读《Spring 3.x企业应用开发实战》,...
com.springsource.org.junit-4.7.0.jar 需要的下载啊
JUnit4.5是Java开发中广泛使用的单元测试框架,它为开发者提供了编写和运行可重复、可靠的测试用例的能力。这个版本的JUnit引入了许多新特性,增强了测试的灵活性和效率。下面将详细介绍JUnit4.5及其核心概念和功能...
8. **Spring Test**:Spring3.X提供了丰富的测试支持,包括`@RunWith(SpringJUnit4ClassRunner.class)`和`@ContextConfiguration`等注解,简化了单元测试和集成测试的编写。 9. **Asynchronous Processing**:...
其核心组件包括`ObjectMapper`,用于对象与JSON之间的转换,以及`JsonParser`和`JsonGenerator`,用于低级别解析和生成JSON。 3. **JSTL-jar**: JSP Standard Tag Library(JSTL)是一个标准的标签库,用于简化JSP...
在Spring框架中,TestContext模块为开发者提供了强大的测试支持,特别是在Spring 2.5版本中,这个测试框架进一步增强了测试的便利性和可扩展性。它允许我们以声明式的方式配置和管理测试环境,包括bean的初始化、...
Spring Test框架与JUnit和TestNG等测试库协同工作,允许开发者在测试期间使用完整的Spring环境,包括自动装配、事务管理等特性,简化了测试的复杂性。 以上仅是对Spring3.X编程技术与应用的一些概览,实际上在使用...
junit.extensions.ActiveTestSuite.class junit.extensions.RepeatedTest.class junit.extensions.TestDecorator.class junit.extensions.TestSetup.class junit.extensions.package-info.class junit.framework....
8. **测试支持**:Spring 2.5提供了更完善的测试工具,如`@RunWith(SpringJUnit4ClassRunner.class)`和`@ContextConfiguration`注解,使得基于Spring的应用测试更加便捷。 9. **集成其他框架**:Spring 2.5加强了与...
5. **测试**:Spring提供了测试模块,支持单元测试和集成测试,可以方便地与JUnit等测试框架结合使用。 在Spring 4.x版本中,有以下关键改进和新特性: 1. **Java 8支持**:Spring 4.x全面支持Java 8,包括Lambda...
4. **模型驱动(Model Driven)**:理解模型驱动的概念,如何将Action类与业务对象绑定,简化Action代码。 5. **动态方法访问(Dynamic Method Invocation,DMI)**:了解如何启用DMI,允许Action方法名通过URL动态...
在本项目中,我们主要关注的是"spring 3.x实战开发源码",这涉及到Spring框架的高级应用,包括Spring MVC、MyBatis以及单元测试等核心知识点。下面将详细阐述这些主题,并结合"chapter12"和"chapter2"这两个源代码...
单元测试是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件下某个特定函数的行为。其实我们每天都在做单元测试。
单元测试所需的junit jar包,里面包含class jar 和源码jar,JUnit 是JAVA语言事实上的标准测试库。JUnit 4是三年以来最具里程碑意义的一次发布。它的新特性主要是针对JAVA5中的标记(annotation)来简化测试,而不是...