• 单元测试


    单元测试 What Why How

    我们只讨论How:

    驱动代码,桩代码和Mock代码
    驱动代码是用来调用被测函数的,而桩代码和Mock代码是用来代替被测函数调用的真实代码的。

     驱动代码、桩代码和Mock代码三者的逻辑关系

      驱动代码(Driver)指调用被测函数的代码,在单元测试过程中,驱动模块通常包括调用被测函数钱的数据准备、调用被测函数以及验证相关结果三个步骤。
     
      代码桩(Stub)是用来代替真是代码的临时代码。比如,某个函数A的内部实现中调用了一个尚未实现的函数B,为了对函数A的逻辑进行测试,那么就需要模拟一个函数B,这个模拟的函数B的实现就是所谓的桩代码。
    伪代码:

    为了实现函数A的全路径覆盖,你需要控制不同的测试用例中函数B的返回值,那么桩函数B的伪代码就应该是:
      当执行第一个测试用例的时候,桩函数B应该返回true,而执行第二个测试用例的时候,桩函数B应该返回false。
      这样就覆盖了被测试函数A的if-else的两个分支。

     桩代码的应用首先起到了隔离和补齐的作用,使被测代码能够独立编译、链接,并独立运行。同时,桩代码还具有控制被测函数执行路径的作用。
     
    编写桩代码通常需要遵守以下三个原则:

    • 桩函数要具有与原函数完全相同的原形,仅仅是内部实现不同,这样测试代码才能正确链接到桩函数;
    • 用于实现隔离和补齐的桩函数比较简单,只需保持原函数的声明,加一个空的实现,目的是通过编译链接;
    • 实现控制功能的桩函数是应用最广泛的,要根据测试用例的需要,输出合适的数据作为被测函数的内部输入。

     
    Mock代码和桩代码的本质区别是:测试期待结果的验证(Assert and Expectiation)。

      • 对于Mock代码来说,我们的关注点是Mock方法有没有被调用,以书面样的参数被调用,被调用的次数,以及多个Mock函数的先后调用顺序。所以,在使用Mock代码的测试中,对于结果的验证(也就是assert),通常出现在Mock函数中。
      • 对于桩代码来说,我们的关注点是利用Stub来控制被测函数的执行路径,不会去关注Stub是否被调用以及怎么样被调用。所以,你在使用Stub的测试中,对于结果的验证,通常出现在驱动代码中。

     参考:https://www.cnblogs.com/111testing/p/11656261.html

  • 相关阅读:
    基于NFS的PV动态供给(StorageClass)
    Helm学习笔记
    k8s日志收集方案
    okhttputils【 Android 一个改善的okHttp封装库】使用(三)
    PopupWindowMenuUtil【popupwindow样式菜单项列表】
    NewBuiltBottomSheetDialog【新建底部对话框】
    NormalDialogFragmentDemo【普通页面的DialogFragment】
    ArticleRemoveDelDialog【基于AlertDialog的回收删除对话框】
    ConfirmCancelBottomSheetDialog【确认取消底部对话框】
    Android-PickerView【仿iOS的PickerView控件,并封装了时间选择和选项选择这两种选择器】使用
  • 原文地址:https://www.cnblogs.com/liuqiyun/p/15591689.html
Copyright © 2020-2023  润新知