Spring环境下的JUnit4测试
1,下载所需jar包:
spring-test-3.2.0.RELEASE.jar
junit-4.11.jar
commons-dbcp-1.4.jar
2,配置Spring数据源:
spring-dao-test.xml
因为测试用例不是运行在Server环境下,不方便通过JNDI取得数据源,所以只能在Spring中自行配置,暂用DBCP(实际开发中建议不用DBCP,有BUG):
- <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
- <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
- <property name="url" value="jdbc:oracle:thin:@192.168.1.2:1523:test" />
- <property name="username" value="test" />
- <property name="password" value="test" />
- </bean>
3,测试DAO
SpringTest.java
- import static org.junit.Assert.*;
- import org.junit.Before;
- import org.junit.Ignore;
- import org.junit.Test;
- import org.junit.runner.RunWith;
- import javax.annotation.Resource;
- import org.springframework.test.context.ContextConfiguration;
- import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
- import org.springframework.test.context.transaction.TransactionConfiguration;
- import org.springframework.transaction.annotation.Transactional;
- @Transactional
- @TransactionConfiguration(transactionManager = "txManager", defaultRollback = true)
- @RunWith(SpringJUnit4ClassRunner.class)
- @ContextConfiguration(locations={"classpath:spring-dao-test.xml","classpath:spring-service-test.xml"})
- public class SpringTest
- {
- @Resource(name="testDao")
- private TestDao testDao;
- @Before
- public void setUp() throws Exception
- {
- }
- @Test
- public void testMyDao()
- {
- try
- {
- testDao.doSomething();
- }
- catch (Exception e)
- {
- fail("Test failed!");
- }
- }
- @Ignore
- public void testOtherSpringObject()
- {
- fail("Not yet implemented");
- }
- }
4,测试Spring的Controller
(1)测试用例代码CreateProductControllerTest.java
- import static org.junit.Assert.*;
- import org.junit.Before;
- import org.junit.Test;
- import org.junit.runner.RunWith;
- import javax.annotation.Resource;
- import org.springframework.http.HttpMethod;
- import org.springframework.mock.web.MockHttpServletRequest;
- import org.springframework.mock.web.MockHttpServletResponse;
- import org.springframework.test.context.ContextConfiguration;
- import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
- import org.springframework.test.context.transaction.TransactionConfiguration;
- import org.springframework.transaction.annotation.Transactional;
- import org.springframework.web.servlet.ModelAndView;
- @Transactional
- @TransactionConfiguration(transactionManager = "txManager", defaultRollback = true)
- @RunWith(SpringJUnit4ClassRunner.class)
- @ContextConfiguration(locations={"classpath:spring-servlet.xml", "classpath:spring-dao-test.xml", "classpath:spring-service-test.xml"})
- public class CreateProductControllerTest
- {
- @Resource(name="/createProduct.htm")
- CreateProductController createProductController;
- private MockHttpServletRequest request;
- private MockHttpServletResponse response;
- @Before
- public void before()
- {
- request = new MockHttpServletRequest();
- response = new MockHttpServletResponse();
- request.setCharacterEncoding("UTF-8");
- }
- @Test
- public void testToSearchPage()
- {
- //request.setRequestURI("createProduct.htm");
- //request.setMethod(HttpMethod.POST.name());
- ModelAndView mv = null;
- try
- {
- mv = createProductController.toSearchPage(request, response);
- }
- catch (Exception e)
- {
- e.printStackTrace();
- fail("testToSearchPage failed!");
- }
- assertNotNull(mv);
- assertEquals(response.getStatus(), 200);
- }
- }
5,注意被测试对象在Spring中不能配置AOP切面代理,否则注入到TestCase时,会产生类型不匹配的异常。因为被代理后的类型发生了变化,注入到TestCase中时,与原始的类型有区别。
另外,运行TestCase时,可能需要加上两个jvm参数:
-Djavax.xml.parsers.DocumentBuilderFactory=com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl
-Djavax.xml.parsers.SAXParserFactory=com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl
相关推荐
基于Spring的JUnit4单元测试
Junit4+Spring2.5单元测试代码示例同时也适用注解注入的形式测试(前提要导好测试的包哦,包MyEclipce自带了)
10. **扩展性与兼容性**:JUnit4设计得非常开放,可以通过实现`Runner`接口来扩展其功能,例如SpringJUnit4ClassRunner可以结合Spring框架进行测试。同时,JUnit4与大多数IDE和构建工具(如Maven、Gradle)良好集成...
JUnit4是Java编程语言中最广泛使用的单元测试框架之一,它为开发者提供了强大的工具来编写和运行测试用例,确保代码的正确性和稳定性。本篇将详细介绍JUnit4的主要特性和使用方法,以及如何通过示例来理解和应用这些...
spring-test是Spring框架的一部分,专门用于测试Spring应用程序。它提供了与Spring容器集成的测试工具,如`@ContextConfiguration`用于加载配置,`@Autowired`自动注入依赖,以及`@MockBean`和`@SpyBean`来创建模拟...
这篇博客主要探讨了如何使用JUnit进行Spring MVC Controller的单元测试。在实际开发中,单元测试可以帮助我们尽早发现潜在的问题,提高软件的可靠性和可维护性。 首先,让我们了解Spring MVC的基本概念。Spring MVC...
《Spring4与JUnit的简单测试实践》 在Java开发领域,Spring框架以其强大的功能和灵活性深受开发者喜爱。Spring4作为其一个重要的版本,引入了许多改进和优化,使得测试变得更加便捷。而JUnit作为Java单元测试的事实...
spring添加 单元测试 junit4 +spring jar包: hamcrest-core-1.3.jar junit-4.12.jar spring-test-4.2.5.RELEASE.jar
4. **运行测试**:通过命令行或者IDE运行Ant任务,Ant会执行JUnit测试,并将结果输出到指定的目录下。 5. **查看测试报告**:Ant可以生成JUnit测试报告,通常为HTML格式,这样我们就可以直观地看到每个测试用例的...
本篇文章将详细探讨如何在Spring环境中利用JUnit4进行有效的单元测试。 首先,让我们了解什么是单元测试。单元测试是对软件中的最小可测试单元进行检查和验证,对于Java来说,这个单元通常是方法。JUnit作为一款轻...
4. `@Autowired`:用于注入Spring管理的bean,使得在测试中可以直接使用。 5. `@MockBean`和`@SpyBean`:这些注解可以用来模拟或监视特定的bean,方便测试。 三、Struts框架的单元测试 1. Struts2的测试挑战:...
2. **创建测试类**:为每个需要测试的Spring DM服务或组件创建一个JUnit测试类。在这些类中,你可以使用`@RunWith(SpringJUnit4ClassRunner.class)`注解来表明测试需要Spring Test的支持。 3. **定义测试上下文**:...
在结合JUnit4进行测试时,我们需要使用Spring的`@ContextConfiguration`注解来加载Spring配置文件,这样可以确保在测试环境中也能注入正确的依赖。例如: ```java @RunWith(SpringJUnit4ClassRunner.class) @...
总结来说,使用JUnit针对Spring MVC的三层进行测试,我们需要: 1. 测试表现层(Controller),验证HTTP请求处理和视图渲染。 2. 测试业务层,确保业务逻辑的正确性和依赖隔离。 3. 测试服务数据访问层,验证数据库...
标题“spring2 junit3”指的是在Spring框架的第二个主要版本中使用JUnit3进行单元测试的相关内容。这篇博文可能探讨了如何在Spring 2.x时代利用JUnit3进行测试驱动开发(TDD),因为JUnit3是当时广泛使用的Java单元...
单元测试—— Spring 环境下测试,所需要的jar包: spring-test-4.3.29.RELEASE.jar、junit-4.13.1.jar、hamcrest-core-1.3.jar。
在整合 `JUnit` 进行测试时,我们需要使用 `Spring` 的测试支持,如 `@ContextConfiguration` 注解来加载配置文件,创建测试所需的 `ApplicationContext`。这样,`Spring` 会自动管理 `DAO` 实例,我们可以在测试...
使用`@RunWith(SpringJUnit4ClassRunner.class)`注解指定使用Spring的JUnit4运行器来运行测试。`@SpringBootTest`注解则用来加载整个Spring应用上下文,`classes=Application.class`指定了应用的主配置类。如果测试...
**如何使用JUnit4进行单元测试?** JUnit4引入了注解(Annotation)来简化测试编写,不再需要强制继承TestCase类。以下是一些关键的JUnit4注解: - `@Before`:类似于JUnit3的setUp方法,用于设置测试前的环境。 -...
JUnit4与Spring等依赖注入框架结合,可以方便地模拟对象间的依赖关系,便于测试隔离。例如,使用`@InjectMocks`和`@Spy`、`@Mock`注解创建并配置mock对象。 7. 缓存和重新运行测试(RunWith and Retrying Tests):...