`
sundful
  • 浏览: 1250228 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

通过Spring2.5对单元测试的Annotation支持进行TDD开发

阅读更多

本文从一个例子出发,根据TDD(测试驱动开发)要求,进行开发。只是用于演示如何使用Spring2.5提供的基于Annonation方式的IOC实现,进行TDD开发。

    首先我们来看一下这个例子的要求:开发一个购物车对象,可以添加商品,删除商品,查询已购商口,结账功能。

    第一步,先来完成添加商品功能,下面就按TDD开发要求,先编写单元测试

    下面是增对该功能,编写的测试代码

  /**
  * @author xmatthew
  *
  */
  @RunWith(SpringJUnit4ClassRunner.class)
  @ContextConfiguration(locations = {"classpath:/applicationContext.xml"})
  @TestExecutionListeners({DependencyInjectionTestExecutionListener.class})
  public class CartTest {
  
     @Autowired
     private SuperStore superStore;
     
     @Test
     public void addCommodity() {
 
         Cart cart = new Cart();
         Commodity commodity = superStore.getCommodity("1"/*电脑桌*/);
         cart.addCommodity(commodity);
         
         Assert.assertEquals(1, cart.size());
         Assert.assertTrue(cart.contains(commodity));
         
     }
 }

 

 

 1 /**
 2  * @author xmatthew
 3  *
 4  */
 5 @RunWith(SpringJUnit4ClassRunner.class)
 6 @ContextConfiguration(locations = {"classpath:/applicationContext.xml"})
 7 @TestExecutionListeners({DependencyInjectionTestExecutionListener.class})
 8 public class CartTest {
 9 
10     @Autowired
11     private SuperStore superStore;
12     
13     @Test
14     public void addCommodity() {
15 
16         Cart cart = new Cart();
17         Commodity commodity = superStore.getCommodity("1"/*电脑桌*/);
18         cart.addCommodity(commodity);
19         
20         Assert.assertEquals(1, cart.size());
21         Assert.assertTrue(cart.contains(commodity));
22         
23     }
24 }

 

    当然这个单元测试不能通过(无法编译)。接下来就是编写代码,让单元测试能顺利通过添加 applicationContext.xml文件

  

 <?xml version="1.0" encoding="UTF-8"?>
 <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context-2.5.xsd">
 
  
     <context:component-scan base-package="com.xmatthew.spring.tdd"/>
     <context:annotation-config/>
 
  
 </beans>
 

 

 

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4        xmlns:context="http://www.springframework.org/schema/context"
 5        xsi:schemaLocation="http://www.springframework.org/schema/beans
 6            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
 7            http://www.springframework.org/schema/context
 8            http://www.springframework.org/schema/context/spring-context-2.5.xsd">
 9 
10  
11     <context:component-scan base-package="com.xmatthew.spring.tdd"/>
12     <context:annotation-config/>
13 
14  
15 </beans>
16 

 

    Commodity.java

 /**
  * @author xmatthew
  *
  */
 public class Commodity {
 
     private String id;
     private String name;
     private BigDecimal price;
     
     /* (non-Javadoc)
      * @see java.lang.Object#equals(java.lang.Object)
      */
     @Override
     public boolean equals(final Object other) {
         if (!(other instanceof Commodity))
             return false;
         Commodity castOther = (Commodity) other;
         return new EqualsBuilder().append(id, castOther.id).append(name,
                 castOther.name).append(price, castOther.price).isEquals();
     }
 
     /* (non-Javadoc)
      * @see java.lang.Object#hashCode()
      */
     @Override
     public int hashCode() {
         return new HashCodeBuilder().append(id).append(name).append(price)
                 .toHashCode();
     }
 
     public Commodity(String id, String name, BigDecimal price) {
         super();
         this.id = id;
         this.name = name;
         this.price = price;
     }
 
     public String getId() {
         return id;
     }
 
     public void setId(String id) {
         this.id = id;
     }
 
     public String getName() {
         return name;
     }
 
     public void setName(String name) {
         this.name = name;
     }
 
     public BigDecimal getPrice() {
         return price;
     }
 
     public void setPrice(BigDecimal price) {
         this.price = price;
     }
     
     
 }
 

 

 

 1 /**
 2  * @author xmatthew
 3  *
 4  */
 5 public class Commodity {
 6 
 7     private String id;
 8     private String name;
 9     private BigDecimal price;
10     
11     /* (non-Javadoc)
12      * @see java.lang.Object#equals(java.lang.Object)
13      */
14     @Override
15     public boolean equals(final Object other) {
16         if (!(other instanceof Commodity))
17             return false;
18         Commodity castOther = (Commodity) other;
19         return new EqualsBuilder().append(id, castOther.id).append(name,
20                 castOther.name).append(price, castOther.price).isEquals();
21     }
22 
23     /* (non-Javadoc)
24      * @see java.lang.Object#hashCode()
25      */
26     @Override
27     public int hashCode() {
28         return new HashCodeBuilder().append(id).append(name).append(price)
29                 .toHashCode();
30     }
31 
32     public Commodity(String id, String name, BigDecimal price) {
33         super();
34         this.id = id;
35         this.name = name;
36         this.price = price;
37     }
38 
39     public String getId() {
40         return id;
41     }
42 
43     public void setId(String id) {
44         this.id = id;
45     }
46 
47     public String getName() {
48         return name;
49     }
50 
51     public void setName(String name) {
52         this.name = name;
53     }
54 
55     public BigDecimal getPrice() {
56         return price;
57     }
58 
59     public void setPrice(BigDecimal price) {
60         this.price = price;
61     }
62     
63     
64 }
65 

 

    SuperStore.java

 /**
  * @author xmatthew
  *
  */
 public interface SuperStore {
 
     
     Commodity getCommodity(String id);
 }

 

 

1 /**
2  * @author xmatthew
3  *
4  */
5 public interface SuperStore {
6 
7     
8     Commodity getCommodity(String id);
9 }
分享到:
评论

相关推荐

    传智播客spring2.5源代码

    2. **注解驱动开发(Annotation-based Development)**:Spring 2.5开始大规模支持Java注解,比如`@Service`、`@Repository`和`@Controller`,它们分别用于标记业务层、数据访问层和控制层的组件。这使得XML配置文件...

    struts2 hibernate3 spring2.5 annotation 整合

    Spring2.5引入了对注解的支持,可以替代XML配置文件,使代码更加简洁和可读。 在整合这三个框架时,Spring作为容器管理Struts2的Action和Hibernate的SessionFactory。Spring的ApplicationContext会初始化所有依赖的...

    使用 Spring 2.5 TestContext 测试框架

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

    struts2+spring2.5+hibernate3.2 annotation配置完整eclipse项目,带数据库脚本

    **Eclipse** 是一个广泛使用的Java集成开发环境(IDE),它提供了对这些框架的强大支持,包括代码提示、自动构建路径、调试工具等。在Eclipse中,可以导入此项目,然后利用其内置的Struts2、Spring和Hibernate插件来...

    struts2 spring2.5 hibernate3.0 annotation 整合

    Struts2、Spring2.5和Hibernate3.0是Java Web开发中三个非常重要的框架,它们各自负责不同的职责,但可以协同工作以构建高效、可维护的Web应用程序。本项目整合了这三个框架,并利用注解(Annotation)进行配置,...

    配置整合DWR3.0和Spring2.5使用annotation注解

    DWR是一个允许JavaScript与Java服务器端进行交互的库,而Spring 2.5引入了对注解的强大支持,使得配置更为简洁。 首先,我们创建一个Controller类,这是Spring MVC中的核心组件。在下面的代码中,我们创建了一个名...

    spring2.5源码

    Spring Test模块在2.5版本中增加了对注解测试的支持,如`@ContextConfiguration`和`@Test`,使得单元测试和集成测试更加方便。 通过深入学习Spring 2.5的源码,开发者可以更好地理解Spring框架的设计思想和工作...

    spring2.5开发参考手册

    这些新特性包括:注解驱动的依赖性注入(annotation-driven dependency injection),使用注解而非XML元数据来自动侦测classpath上的Spring组件,注解对生命周期方法的支持,一个新的web控制器模型将请求映射到加...

    Spring2.5中文开发手册

    在集成测试方面,Spring Test框架在2.5版本中也得到了增强,提供了模拟上下文(MockApplicationContext)和Web应用上下文(WebApplicationContext)的测试支持,方便开发者进行单元测试和集成测试。 总而言之,...

    spring2.5 api

    Spring 2.5 对测试框架进行了改进,引入了 @ContextConfiguration 和 @RunWith 注解,方便进行基于注解的测试,支持对 Spring 容器的控制和测试数据源的管理。 十、其他改进 Spring 2.5 还包含了对其他方面的改进,...

    基于Struts2.18+Spring2.5+Hibernater3.3+Annotation注解开发的电子商务网站demo

    这个“基于Struts2.18+Spring2.5+Hibernate3.3+Annotation注解开发的电子商务网站demo”是一个很好的学习资源,可以帮助开发者加深对这些框架的理解并熟悉实际应用。 1. **Struts2.18**:Struts2是MVC(模型-视图-...

    Struts2+Spring2.5+Hibernate3+annotation 整合程序

    在Spring2.5版本中,对注解的支持得到了显著增强,如@Component、@Service、@Repository和@Controller等,使得配置文件更简洁,降低了XML配置的复杂性。同时,Spring的AOP支持允许我们使用注解来定义切面,提高代码...

    Spring2.5中文帮助文档

    9. **测试框架**:Spring 2.5加强了测试支持,提供了Mock对象和测试上下文框架,使单元测试和集成测试更加容易。 10. **国际化支持**:Spring 2.5对多语言环境的支持也有所增强,允许开发者更轻松地处理不同地区的...

    spring2.5开发参考手册.rar

    提供了更多的测试支持,如`@ContextConfiguration`和`@WebAppConfiguration`注解,方便进行单元测试和集成测试。 10. **Java配置**: 虽然Spring 2.5还未引入完整的Java配置,但已经可以看到这一趋势的萌芽,为...

    spring2.5官方jar

    10. **集成测试支持**:Spring 2.5提供了丰富的测试工具,如`@ContextConfiguration`和`@DirtiesContext`等注解,帮助开发者编写更有效的集成测试。 综上所述,Spring 2.5在提升开发效率、简化配置、增强功能方面...

    Spring2.5的新特性

    在测试方面,Spring2.5增加了对JUnit4的支持,使得编写单元测试更为便捷。开发者可以使用@RunWith(SpringJUnit4ClassRunner.class)注解来启动Spring应用程序上下文,并直接在测试方法上使用@Test注解。 **Spring ...

    struts2.1 spring2.5 ibatis2.3 dwr3 annotation配置 集成

    struts2.1 spring2.5 ibatis2.3 dwr3 annotation配置 集成 此中例子不完整. 如要下载:http://download.csdn.net/source/2138885

    spring2.5+hibernate3.2

    spring2.5 + hibernate3.2x 标注(annotation)开发的简单示例 http://blog.csdn.net/IamHades/archive/2008/01/11/2038188.aspx

Global site tag (gtag.js) - Google Analytics