为已有代码添加Unit Test Case所引发的问题和思考

因为项目组在实行Scrum,想在下一阶段的开发中实行TDD,因为我就为几个已经功能完善的模块添加Unit Test Case。在此过程中,就发现了一些问题。

 

    问题一

在一个模块的一个主要业务方法中,需要从数据库中读取数据。

 

AllocateStream(String key, ServetlContext context)
{
         ..........
       
         ApplicationContext = WebApplicationContextUtils.getWebApplicationContext(context);
	 StreamDao dao = ApplicationContext.getBean("StreamDao");

	 .........
}

 

       在上面的代码中,通过context来,经由Spring来获取Dao对象,此处我认为不需要将Dao对象直接耦合在业务方法中,可以把Dao对象当成方法的参数传递进来或者通过Spring配置文件来关联此Dao对象。以便减少编写测试代码过程中Mock的难度。由于该模块已经在Demo系统,因此不便修改此处代码,所以为了完成该方法的Unit Test,所以我只有通过mock ServletContex和Spring的ApplicationContex来完成该方法的Test。但在Mock Spring的Context过程中,发现了一个更大的问题。

 

     问题二

         在mock Spring的WebApplicationContext过程中,由于需要读取某配置文件,而读取配置文件的代码如下:

 

InitXX()
{
	......
	URL url = this.getClass().getClassLoader().getResource("/conf/xx.xml");  
}

    通过ClassLoader的getResource方法来获取配置文件,是以classpath为起始路径来查找该资源。问题就出在从classpath来查找资源。当该方法应用在demo系统中时,作为一个web项目,WEB-INF目录会作为classpath,因此通过ClassLoader的getResource方法可以定位查找到该资源。

    但是在单独运行Test Case时,在MockSpring的WebApplicationContext的过程中,需要读取该配置文件,但存放该配置文件的路径并未添加到Classpath中,所以根本查找不到该配置文件。

   为了解决这个问题,通过查看API,我给出了下面的解决方法:

    用Class.getResource()方法来替代ClassLoader的getResource方法。调用Class.getResource()时,如果路径是不以"/"开头,则是从当前目录开始查找,如果路径是以"/"开头,则是从classpath开始查找。因此可以用下面的代码来替代上面的代码:

 

InitXX()
{
	......
	URL url = this.getClass().getResource("conf/xx.xml");  
}

 

    记录以上两个发现的问题,作为实行TDD的开端,以便以后查看。。。。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值