单元测试、集成测试和功能测试

一、单元测试 Unit Tests

单元测试用于测试最小功能单元,比如单个方法(给定一个指定状态的类,然后调用该类的x方法,最后检查状态是否符合预期)。单元测试应该聚焦在一个特定的功能上(比如,在一个空的stack上调用pop方法是否抛出了InvalidOperationException)。单元测试应该全部在内存中执行,这意味着测试代码和被测试代码不应该:

  • 调用进入其他方法;
  • 访问网络;
  • 访问数据库;
  • 使用文件系统;
  • 新建线程;
  • 等;

被测试代码必须和其所依赖的代码进行隔离,可以对mock所有的依赖代码,这样你便可以更加聚焦于你的测试代码。
简而言之,单元测试应该尽可能的简单、易于调试、可靠、快速执行,用来帮助你检查你的程序的最小构建模块是否在被组合在一起前能够正常工作。值得注意的是,虽然单元测试可以证明模块独立工作时是正常的,但是无法证明模块组合在一起后也能正常工作。

二、集成测试 Integration Tests

集成测试通过组合代码单元和测试单元来检查其组合结果是否正确。这可以是在系统的内部,也可以是多个系统的组合来进行测试。另一个和单元测试不同之处是,集成测试可以使用线程,访问数据库或者做保证所有的代码和不同的环境下都会正确工作。
假如你构建了一些序列化的代码,并且进行了不访问硬盘的单元测试,那么你如何知道系统会在下载和存盘时正确工作呢?可能你会忘记刷新或者关闭文件流,可能你的文件系统权限不对。唯一的确认方法就是在真正的环境下来进行测试。
这种测试方法的主要的优势在于可以找出单元测试无法找到的bug,缺点是集成测试访问了更多的代码,可靠性变差,难以调试,测试代码更难维护。
另外,集成测试不能证明一个完整的功能可以正确工作。用户可能不关心程序的内部细节,但是我们需要。

三、功能测试 Functional Tests

功能测试用户检查特定的功能是否正常。功能测试不关心中间结果或者副作用,只关注最终结果。比如调用Square(2),返回的结果是否为4.

参考:

What’s the difference between unit, functional, acceptance, and integration tests?

你可能感兴趣的:(Android)