ReadyGo!技术成就梦想 >> JAVA技术 >> 开源技术 >> 轻松测试-学习如何简化测试外部资源

轻松测试-学习如何简化测试外部资源

ReadyGo!技术成就梦想 www.efish.cn efish 2007-10-6 3:33:44

  我们将从构建简单的驼鹿监视软件开始示例各种场景下的测试驱动开发。

  鹿是鹿家族中的最大个的成员。目前世界上估计有2百万头。为了更好的统计,世界驼鹿组织让我们开发一个驼鹿监视软件,希望保护人员能够跟踪和记录他们见到的驼鹿。



本文假设读者已经熟悉java/ant/maven/classpath,而且至少写过一两个简单的junit测试。


vanilla junit

首先编写moose类:
package moose;
import java.util.date;
public class moose {
    private date datetimeobserved;
    private int age;
    
    public moose(date datetimeobservedparam, int estimatedage) {
        this.datetimeobserved = datetimeobservedparam;
        this.age = estimatedage;
    }
}

  虽然驼鹿最长可以生存25年,但大部分驼鹿在年青的时候就被捕杀,通常只活了2、3年。根据世界驼鹿组织报告,我们想知道某一年龄后的驼鹿数据,因此我们增加了isolderthan(int)方法。
单元测试如下:
    public void testisolderthan() {

        moose moose = new moose(new date(), moose_age);
        
        asserttrue("moose age "+ moose_age +" should of been older than "+ test_age, moose.isolderthan(test_age) );
    }
方法:
    boolean isolderthan(int contenderage) {
        return this.age >= contenderage;
    }
  这是一个普通的junit测试用例,这种方式通常用在测试驱动的开发中。这种完全独立的方法一般是很少的;通常我们都需要一些代价昂贵的或比较难构建的外部资源。

使用伪对象和jmock

  观察驼鹿的最佳时间是在黎明和黄昏,跟其他动物的观察时间相似。wom希望我们提供获取记录驼鹿被发现的时间的保护人员,这样就可以通过string getobservername()来获取相应的驼鹿了。

  不幸地是,保护人员的接口来自第三方接口personnelunit,而这是个大家伙没有ldap我们是无法构造的。

  为了测试getobservername(),我们可以启动ldap服务器,发送数据,运行测试用例,然后再关闭ldap。但那将是集成测试,而不是单元测试了,对我们来说宁可多写些代码。因此,我们创建了一个包含我们需要方法的ranger接口:
    public interface ranger {
    
        string getname();  
    }
  这给我们第一个启发式的单元测试:用接口分离外部依赖。
  我们需要改变moose的构造函数增加ranger参数。于是变成:
    ... above as before...

    private ranger observer;
    
    public moose(   date datetimeobservedparam,
                    int estimatedage,
                    ranger observedby)
    {
        this.datetimeobserved = datetimeobservedparam;
        this.age = estimatedage;
        this.observer = observedby;
    }

    ... below as before ...

     

相关文章
junit学习笔记之netbeans入门篇 junit学习笔记之netbeans入门篇
spring+hibernate的单元测试juni.. spring提供的单元测试是强大的,spring的单元测试很简单,封装的很好。我们要用spring的单元测试测试我们写..
看 junit 中metedata的巧妙应用 juunit4至今还是神神秘秘,不知道最终是个什么样子。但是已经有文章在对其进行介绍。先不管文章里描述的是否..
关于java单元测试中的伪对象介绍.. 在单元测试的策略中伪对象被广泛使用。他从测试中分离了外部的不需要的因素并且帮助开发人员专注于被测试的..
java标准单元测试库 junit 4 抢先.. junit 是 java? 语言事实上的 标准单元测试库。junit 4 是该库三年以来最具里程碑意义的一次发布。它的新特..
java开源项目——突破junit的局限 “没有人喜欢bug。”大多数关于单元测试的文章以这句话开篇。的确,我们都希望代码如设计的那样准确地执行,..
2秒记住本站域名

玩过泡泡龙吗?Readygo?Go! 再加上.Com.Cn的后缀,那就是大名小顶的ReadyGo.com.cn

分类导航
ReadyGo!技术成就梦想