你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / Linux开发
使用MOCK对象进行单元测试的实例讲解(3)
 
下面是mock对象:public class MockSystemEnvironment implements Environmental {  
private long currentTime;  
public long getTime() {  
return currentTime;  
   }  
public void setTime(long currentTime) {  
this.currentTime = currentTime;  
   }  
public void playWavFile(String fileName) {  
     playedWav = true;  
   }  
public boolean wavWasPlayed() {  
return playedWav;  
   }  
public void resetWav() {  
     playedWav = false;  
   }  
}

  下面是一个调用getTime的具体类:

import java.util.Calendar;  
public class Checker {  
private Environmental env;  
public Checker(Environmental env) {  
this.env = env;  
   }  
public void reminder() {  
     Calendar cal = Calendar.getInstance();  
     cal.setTimeInMills(env.getTime());  
int hour = cal.get(Calendar.HOUR_OF_DAY);  
if(hour >= 17) {  
      env.playWavFile("quit_whistle.wav");  
     }  
   }  
}

  使用env.getTime()的被测代码并不知道测试环境和真实环境之间的区别,因为它们都实现了相同的接口。现在,你可以借助mock对象,通过把时间设置为已知值,并检查行为是否如预期那样来编写测试。

import java.util.Calendar;  
import junit.framework.TestCase;  
public class TestChecker extends TestCase {  
public void testQuittingTime() {  
      MockSystemEnvironment env = new MockSystemEnvironment();  
      Calendar cal = Calendar.getInstance();  
      cal.set(Calendar.YEAR, 2006);  
      cal.set(Calendar.MONTH, 11);  
      cal.set(Calendar.DAY_OF_MONTH,7);  
      cal.set(Calendar.HOUR_OF_DAY, 16); 
      cal.set(Calendar.MINUTE, 55);  
long t1 = cal.getTimeInMillis();  
      env.setTime(t1);  
      Checker checker = new Checker(env);  
      checker.reminder();  
      assertFalse(env.wavWasPlayed());  
       t1 += (5*60*1000);  
      env.setTime(t1);  
      checker.reminder();  
      assertTrue(env.wavWasPlayed());  
      env.resetWav();  
      t1 += 2*60*60*1000;  
      env.setTime(t1);  
      checker.reminder();  
      assertTrue(env.wavWasPlayed());  
   }  
}

(编辑:aniston)

  推荐精品文章

·2024年12月目录 
·2024年11月目录 
·2024年10月目录 
·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089