EasyMock介绍

2,503 阅读4分钟

一、 mock介绍

1.1简介

mock测试 就是在测试过程中,对于某些不容易构造或者 不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。 mock对象 这个虚拟的对象就是mock对象。mock对象就是真实对象在调试期间的代替品。 mock对象使用范畴 真实对象具有不可确定的行为,产生不可预测的效果,(如:股票行情,天气预报) 真实对象很难被创建的 真实对象的某些行为很难被触发 真实对象实际上还不存在的(和其他开发小组或者和新的硬件打交道)等等.

什么时候需要Mock对象

----- 真实对象具有不可确定的行为(产生不可预测的结果,如股票的行情) ----- 真实对象很难被创建(比如具体的web容器) ----- 真实对象的某些行为很难触发(比如网络错误) ----- 真实情况令程序的运行速度很慢 ----- 真实对象有用户界面 ----- 测试需要询问真实对象它是如何被调用的(比如测试可能需要验证某个回调函数是否被调用了) ----- 真实对象实际上并不存在(当需要和其他开发小组,或者新的硬件系统打交道的时候,这是一个普遍的问题)

1.2举例说明

一个闹钟根据时间来进行提醒服务,如果过了下午5点钟就播放音频文件提醒大家下班了,如果我们要利用真实的对象来测试的话就只能苦苦等到下午五点,然后把耳朵放在音箱旁…我们可不想这么笨,我们应该利用 mock对象来进行测试,这样我们就可以模拟控制时间了,而不用苦苦等待时钟转到下午5点钟了。一个闹钟根据时间来进行提醒服务,如果过了下午5点钟就播 放音频文件提醒大家下班了,如果我们要利用真实的对象来测试的话就只能苦苦等到下午五点,然后把耳朵放在音箱旁…我们可不想这么笨,我们应该利用 mock对象来进行测试,这样我们就可以模拟控制时间了,而不用苦苦等待时钟转到下午5点钟了。


public abstract class Environmental {
	boolean playedWav = false;
 
	public abstract long getTime();
 
	public abstract void playWavFile(String fileName);
 
	public abstract boolean wavWasPlayed();
 
	public abstract void resetWav();
}

真实的实现代码: public class SystemEnvironment extends Environmental { public long getTime() { return System.currentTimeMillis(); }

public void playWavFile(String fileName) {
	playedWav = true;
}

public boolean wavWasPlayed() {
	return playedWav;
}

public void resetWav() {
	playedWav = false;
}

下面是mock对象: public class MockSystemEnvironment extends 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的具体类: public class Checker { private Environmental env;

public Checker(Environmental env) {
	this.env = env;
}

public void reminder() {
	Calendar cal = Calendar.getInstance();
	cal.setTimeInMillis(env.getTime());
	int hour = cal.get(Calendar.HOUR_OF_DAY);
	if (hour >= 17) {
		env.playWavFile("quit_whistle.wav");
	}
}

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

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);

	//设置时间为16:55		
	long t1 = cal.getTimeInMillis();
	System.out.println(t1);
	env.setTime(t1);
	Checker checker = new Checker(env);
	checker.reminder();
	assertFalse(env.wavWasPlayed());
	
	//设置时间为17:00
	t1 += (5 * 60 * 1000);
	System.out.println(t1);
	env.setTime(t1);
	checker.reminder();
	assertTrue(env.wavWasPlayed());
	env.resetWav();
	
	//设置时间为19:00
	t1 += 2 * 60 * 60 * 1000;
	System.out.println(t1);
	env.setTime(t1);
	checker.reminder();
	assertTrue(env.wavWasPlayed());
}

二.EasyMock用法使用

EasyMock,可以参考如下步骤:

1.创建Mock对象

2.设定Mock对象的预期行为和输出

3.将Mock对象切换到Replay状态

4.在单元测试中调用Mock对象

5.检查对Mock对象的调用是否与预期一致

三.使用easymock简单使用假数据的方法

第一步:www.easy-mock.com/进入该网站,进行注册!…

点击右上角的创建接口,会进入这个页面

点击创建即可获得我们需要的接口

第二步:复制我们创建成功的接口到vue请求地址中

 <template>
      <div class="home">
        <div class="btn" @click="index"></div>
      </div>

</template>

<script>
import HelloWorld from '@/components/HelloWorld.vue'
export default {
  name: 'home',
  components: {
    HelloWorld
  },
  data(){
    
  },
  created(){
    
  },
  methods:{
    btn(){
      let url = "https://www.easy-mock.com/mock/5d16309c92b9806384cf46e8/example/index"; //放在这
            this.axios.get(url).then(result=>{
            this.floor1s = result.data.data;
            })
    }
  }
}
</script>

第三步:npm run serve 哈哈哈哈!!!