浅谈Mock测试

Mock框架的选择

在整个java生态圈中,支持mock的开源框架还是比较多的,比如常用的Mockito、PowerMock、EasyMock和JMockit等开源框架。这些框架在mock方面都具有比较强大的功能与比较广泛的使用量。但是这些框架都具有一个相同的缺点,那就是需要或多或少的编码工作来mock所需要的接口返回数据。

在设计mock框架的时候,我们考虑到尽量让写单元测试的人员或研发人员少编码或不编码,来获取不同的业务场景所需要的测试数据。

什么是Mock?

用一句通俗的语言来说: Mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。 

Mock 方法是单元测试中常见的一种技术,它的主要作用是模拟一些在应用中不容易构造或者比较复杂的对象,从而把测试与测试边界以外的对象隔离开。Mock 对象有助于从测试中消除依赖项,使测试更单元化。

单元测试JUnit与Mock测试

单元测试一般只测试某一个功能,但是由于类之间的耦合性往往难以把功能隔离开来。例如你希望测试某个业务逻辑处理数据的功能,但是数据是从Database取回的,这就涉及到DAO层的类调用;你不希望单元测试函数去访问数据库(除非是测试DAO的单元测试),于是你希望有一个假的DAO类刚好返回你需要的测试数据。Mock的作用就是在单元测试里模拟类的行为和状态。

JUnit断言

junit.framework包下的Assert提供了多个断言方法. 主用于比较测试传递进去的两个参数.

Assert.assertEquals();及其重载方法:

1. 如果两者一致, 程序继续往下运行.

2. 如果两者不一致, 中断测试方法, 抛出异常信息 AssertionFailedError .

TDD--测试驱动开发(Test-Driven Development)

是敏捷开发中的一项核心实践和技术,也是一种设计方法论。TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码。TDD虽是敏捷方法的核心实践,但不只适用于XP(Extreme Programming),同样可以适用于其他开发方法和过程。

TDD带来的好处

最重要的是提高了单元测试的覆盖率。 传统的先写产品代码,再写单元测试,有两个弊端:

  • 一方面是由于产品代码已经成型,生米已经煮成熟饭,你再来写,很容易就会陷入思维定式中,起不到发现Bug的作用;
  • 另一方面,这往往会让单元测试成为一项政治任务,产品发布前几天,发现单元测试覆盖率不足,来一场全员写测试用例的运动,这样写出来的代码质量肯定不高。

你可能感兴趣的:(测试)