主要介绍单元测试中获得bean的三种方法,以及各自的优劣。其实跟开发时获得bean方法一样,如下:
a.通过ClassPathXmlApplicationContext得到ApplicationContext,再getBean
b.通过set函数获得bean
c.启用直接对保护类型属性变量进行注入的机制
日常应用中推荐大家使用第二、三中方法。尤其对于bean较多时,使用第三种可以方便省事很多。
所用依赖为junit 3.8.1和spring-test包2.5.6。下面为详细介绍:
1、通过ClassPathXmlApplicationContext得到ApplicationContext,再getBean
单元测试中需要引入bean,最容易想到的办法就是使用spring bean注入的原理,代码如下:
package com..*.*.*.test; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.test.AbstractDependencyInjectionSpringContextTests; import com.*.*.*.TestService; public class TestBean extends AbstractDependencyInjectionSpringContextTests { @Test public void testBeanInjection() { ApplicationContext testContext = new ClassPathXmlApplicationContext("test_services.xml"); TestService testService = (TestService)testContext.getBean("testService"); } }
先通过ClassPathXmlApplicationContext bean xml得到ApplicationContext,再getBean。
但按照Spring的推荐,在单元测试时不应该依赖于Spring容器,也就是说不应该在单元测试时启动ApplicationContext并从中获取Bean,所以此种方法不推荐。建议大家继续看看下面两种
其中test_services.xml内容如下,下面两种方法一样。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans default-autowire="byName"> <bean id="testService" class="com.*.*.*.TestServiceImpl"> </bean> </beans>
2、通过set函数获得bean
通过getConfigLocations设置bean xml路径
新增setTestService设置函数,对testService赋值
注意testService的类型不限制
package com..*.*.*.test; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.test.AbstractDependencyInjectionSpringContextTests; import com.*.*.*.TestService; public class TestSendEmail extends AbstractDependencyInjectionSpringContextTests { private TestService testService; public void setTestService(TestService testService) { this.testService = testService; } /** * 设置bean xml路径,可以添加多个 */ protected String[] getConfigLocations() { return new String[] {"test_services.xml"}; } @Test public void testBeanInjection() { assertTrue(testService != null); } }
这种方式的好处在不用手动加载bean xml文件,但每个bean需要一个set函数,当bean较多时需要生成较多set函数
3、启用直接对保护类型属性变量进行注入的机制
通过getConfigLocations设置bean xml路径
新增构造函数,在其中调用setPopulateProtectedVariables(true)设置启用直接对保护类型属性变量进行注入的机制
注意testService为保护型
package com..*.*.*.test; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.test.AbstractDependencyInjectionSpringContextTests; import com.*.*.*.TestService; public class TestBean extends AbstractDependencyInjectionSpringContextTests { protected TestService testService; public TestBean(){ // 启用直接对保护类型属性变量进行注入的机制 this.setPopulateProtectedVariables(true); } /** * 设置bean xml路径,可以添加多个 */ protected String[] getConfigLocations() { return new String[] {"test_services.xml"}; } @Test public void testBeanInjection() { assertTrue(testService != null); } }
这种方式的好处在不用手动加载bean xml文件,也不用再写set函数 ,但需要一个构造函数并在其中启用直接对保护类型属性变量进行注入的机制
其他:
程序中依赖了spring-test的包,需要在pom中添加依赖如下
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>2.5.6</version> </dependency>
参考:http://mvnrepository.com/artifact/org.springframework/spring-test/2.5
相关推荐
在案例中,你将看到如何创建测试类,定义测试方法,设置测试数据,以及如何利用JUnit和Spring/Struts提供的工具来编写高效的单元测试。通过分析和运行源码,你可以了解如何将这些概念应用于实际项目,提高代码质量。...
在Spring MVC框架中,单元测试是确保代码质量的重要步骤,特别是在控制器层(Controller)。这篇博客主要探讨了如何使用JUnit进行Spring MVC Controller的单元测试。在实际开发中,单元测试可以帮助我们尽早发现潜在...
在Java开发领域,Spring框架是应用最广泛的IoC(Inversion of Control)和AOP(Aspect Oriented Programming)框架之一,而JUnit则是Java语言中进行单元测试的标准库。本篇文章将详细探讨如何在Spring环境中利用...
在使用IDEA与JUnit进行单元测试时,有时会遇到bean注入失败的问题,这可能会阻碍测试的正常进行。本文将详细介绍如何解决这个问题。 首先,让我们分析可能导致bean注入失败的原因: 1. **配置文件问题**: 原因一...
Spring Boot Junit单元测试【从零开始学Spring Boot】"的主题,深入探讨Spring Boot中Junit单元测试的使用方法和最佳实践。 首先,我们要了解什么是单元测试。单元测试是一种针对软件中的最小可测试单元(如方法)...
在Spring框架中,进行Web工程的JUnit单元测试是软件开发中的关键步骤,它能确保代码的质量和可维护性。本文将深入探讨如何利用Spring管理的Web工程进行单元测试,以及如何借助工具提升测试效率。 首先,理解“通过...
在Spring框架中,进行Junit单元测试是软件开发过程中的重要环节,有助于确保代码的健壮性和可维护性。在本篇文章中,我们将探讨如何利用Spring的MOVE(Model-View-Controller)架构以及JUnit库来执行单元测试。首先...
在Spring框架中,单元测试是非常重要的一环,因为它可以帮助开发者确保代码的质量和稳定性。Junit是Java中最常用的单元测试框架,它提供了一套简单易用的API来编写和执行测试用例。 在Spring框架中,`spring-test`...
在SSM环境中,使用Junit4和spring-test库进行单元测试是标准做法。下面将详细解释如何使用这两个库以及所需的jar包。 Junit4是Java领域广泛使用的单元测试框架,它提供了一套丰富的注解,使得编写测试用例变得更加...
总的来说,Spring4提供了丰富的测试支持,结合JUnit能够实现从单元测试到集成测试的全面覆盖。这不仅提高了代码质量,也加速了问题定位和修复的过程。在实际开发中,应充分利用这些工具,确保软件的健壮性和稳定性。...
本教程将详细讲解如何搭建一个Spring MVC项目,并实现Junit单元测试,确保代码的质量。 首先,我们需要了解Spring MVC的基本构成。Spring MVC的核心组件包括DispatcherServlet、Controller、ViewResolver、...
当我们需要对Spring框架中的组件进行单元测试时,通常会将JUnit与Spring进行整合。本篇文章将详细介绍如何在Spring环境中利用JUnit进行单元测试,以及在这个过程中可能遇到的关键知识点。 首先,我们需要了解Spring...
JUnit是Java中最常用的单元测试框架,可以用于编写和运行测试用例。在Struts2SpringUnitDemo中,可能使用了JUnit来测试Action和Service类,确保它们的功能正确无误。 4. **Action和Service的测试**:在Struts2中,...
SpringMvc单元测试Junit是Java开发中的重要实践,主要用于确保应用程序的特定部分,如控制器,服务或DAO,按预期工作。在这个Demo中,我们将深入探讨SpringMvc如何与JUnit结合进行有效的单元测试,以及如何利用这些...
本文将深入探讨如何在Spring Boot项目中利用Junit进行单元测试。 首先,我们需要理解单元测试的基本概念。单元测试是对软件中的最小可测试单元进行检查和验证,如方法、函数或类。Junit提供了丰富的注解和断言功能...
在Spring Boot项目中,JUnit测试是开发者进行单元测试的常用工具。JUnit是一个流行的Java编程语言的单元测试框架,它使得测试代码的编写变得简洁而高效。这篇博客文章(虽然描述为空,但可以从标题和标签推测内容)...
1. **JUnit**:JUnit是Java编程语言中最常用的单元测试框架,它提供了编写和运行可重复测试的方法。在Spring MVC中,我们用JUnit来创建和执行测试用例。 2. **Mockito**:Mockito是一个流行的Java模拟框架,用于...
本文将深入探讨如何在IDEA中对Spring多模块项目中的Service层进行单元测试。 首先,我们需要理解Spring Boot的多模块架构。一个标准的Spring Boot多模块项目通常包括以下部分:父模块(parent)、应用主模块...
JUnit4是Java编程语言中最受欢迎的单元测试框架。它简化了测试用例的编写,引入了注解(Annotations)来定义测试方法,如@Test、@Before和@After。JUnit4还支持参数化测试、异常测试等多种测试场景,使得测试更加...
描述中的链接指向了一篇名为“Spring 2.5+Junit4的单元测试”的博客文章,虽然具体内容未给出,但可以推断这篇文章可能讲述了如何在Spring 2.5版本中集成Junit4进行单元测试的实践和技巧。 标签“源码”意味着我们...