Easymock学习
Author:luojie
- 1. Easymock简介
EasyMock 是一套通过简单的方法对于指定的接口或类生成 Mock 对象的类库,它能利用对接口或类的模拟来辅助单元测试。
用于白盒测试,与预期结果不同,才去分析代码。
- 2. Easymock + junit 单元测试
EasyMock采用“记录-----回放”的工作模式,基本使用步骤:
*
创建Mock对象的控制对象Control。
*
从控制对象中获取所需要的Mock对象。
*
记录测试方法中所使用到的方法和返回值。
*
设置Control对象到“回放”模式。
*
进行测试。
*
在测试完毕后,确认Mock对象已经执行了刚才定义的所有操作。
public class TalkerController {
public Integer getResponseByWord(String word){
/*if(word=="我很生气!"){
return EmotionConstants.very_angry_emotion;
}
else if(word == "我有点生气"){
return EmotionConstants.normal_angry_emotion;
}
else if(word == "我心态平静"){
return EmotionConstants.normal_emotion;
}
else if(word == "我有点开心"){
return EmotionConstants.normal_happy_emotion;
}
else if(word == "我很开心"){
return EmotionConstants.very_happy_emotion;
}else{
return 0;
}*/
return 0;
}
easymock测试类初始化代码:
@Before
public void init(){
calMotion = new CalculateMotion();
talkerMock = EasyMock.createMock(TalkerController.class);
calMotion.setController(talkerMock);}
easymock测试类实现函数getResponseByWord代码:
@Test
public void calTest() throws Exception{
EasyMock.expect(talkerMock.getResponseByWord("我很生气!
")).andReturn(5);
EasyMock.expect(talkerMock.getResponseByWord("我很开心
")).andReturn(1);
EasyMock.replay(talkerMock);
Human a = new Human("我很生气!", 1);
Human b = new Human("我很开心", 1);
calMotion.getHumanList().add(a);
calMotion.getHumanList().add(b);
int total = calMotion.calculateAvgMotion();
System.out.println("total motion:"+total);
Assert.assertEquals(6, total);
}
- 3. easymock + spring + junit4
easymock测试类关键代码如图所示:
Junit4的测试套件:
@RunWith(Suite.class)
// 指定运行器
@Suite.SuiteClasses({ CalculatorTest.class, ParametersTest.class })
// 指定要测试的类
public class TestAll
{
}
@RunWith(Suite.class)
@SuiteClasses(TestAll.class)
// 除了指定类,也可以指定套件类
public class TestAll2
{
}
- 4. Junit主要语法
JUnit4使用Java5中的注解(annotation),以下是JUnit4常用的几个annotation:
* @Before:初始化方法 对于每一个测试方法都要执行一次(注意与BeforeClass区别,后者是对于所 有方法执行一次)
* @After:释放资源 对于每一个测试方法都要执行一次(注意与AfterClass区别,后者是对于所
有方法执行一次)
* @Test:测试方法,在这里可以测试期望异常和超时时间
* @Test(expected=ArithmeticException.class)检查被测方法是否抛出ArithmeticException异常
* @Ignore:忽略的测试方法
* @BeforeClass:针对所有测试,只执行一次,且必须为static void
* @AfterClass:针对所有测试,只执行一次,且必须为static void
* 一个JUnit4的单元测试用例执行顺序为:
* @BeforeClass -> @Before -> @Test -> @After -> @AfterClass;
* 每一个测试方法的调用顺序为:
* @Before -> @Test -> @After;
- 5. 参考网站:
http://jackyrong.iteye.com/blog/1934670(easymock快速入门教程)
http://blog.csdn.net/vking_wang/article/details/9170979(easymock基本语法)
http://blog.csdn.net/u010218617/article/details/10468441(easymock+spring)
http://blog.csdn.net/zhangxin09/article/details/42487319(junit+mockito)