前面的练习中,通过xxx-items.xml 定义了Data Model,在hMC管理界面中update系统(以便更新数据库表的定义),添加数据(popuulate the data model)。
这之后的练习中,通过Java代码来访问数据。
这个章节中,我们将通过“测试驱动开发“Test Driven Development, or TDD的方式,测试前面练习的成果。
准备工作,在hybris管理界面中初始化了 junit tenent
编写DAO的interface代码
编写DAO的测试代码( 注意,这里是先编写测试代码,后编写实现代码~~~~~~~~)
编写DAO的实现代码 - 这里使用了hybris' Flexible Search Query ,具体的Query语法要看培训的ppt讲义,或者是hybris WiKi网站
执行junit测试
===============================================
上面的测试将失败,因为在Integration Test代码中,对StadiumDAO的调用,不是在我的测试代码中生成该对象并调用,而是借助Spring框架来生成对象,然后我来用。
具体的测试代码片段如下:
@Resource //如果将该注释应用于一个字段或方法,那么初始化应用程序组件时容器(Spring)将把所请求资源的一个实例注入其中。
private StadiumDAO
stadiumDAO
@Test
public void stadiumDAOTest()
{
List stadiumsByCode =
stadiumDAO.findStadiumsByCode(STADIUM_NAME); //注意这里没有去生成
stadiumDAO对象就直接使用了
具体的DefaultStadiumDAO实现代码如下:
@Component(value = "stadiumDAO")
public class DefaultStadiumDAO implements StadiumDAO
怎么让hybris/Spring来生成该对象呢?
英文:This is telling Spring that we have a bean called stadiumDAO that it can use for wiring. However we need to tell Spring that it should browse this package to find the annotation. To do this we need to add a
context:component-scan
tag to cuppy-trail's application context, as described by Spring here in their discussion on the component-scan tag
中文:修改hybrpis的cupptytail-spring.xml文件,在Spring框架中配置bean - DAO实现类(代码)
参考:Spring容器组建注解@Component和Resouces实现完全注解配置
http://www.2cto.com/kf/201206/137806.html
-------------------------------------------------
我的问题:
为什么这个
stadiumDAO需要做类扫描,而在后面的练习中用到的stadiumService就不需要扫描,而是用bean定义呢?为什么有两种方法?不同在哪里呢?
自言自语:可能的回答是DefaultStadiumService 的代码中没有
@Component(value = "xxxxx")
public class DefaultStadiumService implements StadiumService
下面是stadiumService的Spring bean生命:
===============================================
Java Mockup测试参考: 5分钟了解Mockitto