随笔 - 101  文章 - 1  评论 - 0  阅读 - 12853 

模拟打桩(Stub)是一种在软件测试中使用的技术,用于替代某些代码模块,从而隔离待测试单元的行为。通过使用一个“桩”来替代真实的代码,测试者可以控制待测试单元的环境和输入,使得测试更可控和可预测。

示例解释

假设我们有一个简单的应用程序,其中有一个函数 calculateTotalPrice,它负责计算购物车中商品的总价。这个函数依赖于一个外部服务 getDiscount,该服务会返回当前的折扣百分比。

# 实际代码
def getDiscount():
    # 假设这个函数会调用一个外部服务来获取实时折扣
    # 这里简化为一个固定返回值
    return external_service_call()

def calculateTotalPrice(items):
    total = sum(item['price'] for item in items)
    discount = getDiscount()
    return total * (1 - discount)

在测试 calculateTotalPrice 函数时,我们并不想依赖于 getDiscount 的实际实现,因为这可能会涉及到网络请求或不稳定的外部服务。此时,我们可以使用“桩”来替代 getDiscount

# 测试代码
def stub_getDiscount():
    return 0.1  # 假设折扣为 10%

def test_calculateTotalPrice():
    items = [{'price': 100}, {'price': 200}]
    # 使用桩来替代实际的 getDiscount 函数
    original_getDiscount = calculateTotalPrice.__globals__['getDiscount']
    calculateTotalPrice.__globals__['getDiscount'] = stub_getDiscount
    
    try:
        result = calculateTotalPrice(items)
        assert result == 270  # 期望结果为 (100 + 200) * 0.9
    finally:
        # 恢复原始的 getDiscount 函数
        calculateTotalPrice.__globals__['getDiscount'] = original_getDiscount

test_calculateTotalPrice()

解释

  1. 替换依赖: 在测试中,我们用 stub_getDiscount 替换掉了 getDiscount。这样一来,无论外部服务的实际折扣是多少,我们都可以确保我们的测试稳定地使用 10% 的折扣。

  2. 控制测试环境: 通过这种方式,我们可以完全控制 calculateTotalPrice 的行为,不受外部因素的影响。

  3. 简化测试: 使用桩可以简化测试,因为我们不必考虑外部服务的复杂性,只需专注于我们要测试的功能本身。

通过这种方式,模拟打桩可以帮助我们创建可靠且可重复的单元测试。

 

"Stub" 这个词源自于英文,原意是指“树桩”或“残余部分”。在软件测试中,“Stub”是一个模拟对象或函数,用来替代某些复杂或难以控制的组件。这个术语之所以被使用,主要是因为“Stub”就像一个简单的“桩”或“支撑物”,用来暂时代替实际的、更复杂的功能,以便进行测试。

为什么叫“Stub”

  1. 简化复杂性: 就像树桩是树的一个简单部分,Stub 是系统中某个复杂组件的简单替代。它不需要实现所有复杂的逻辑,只需提供足够的接口来支持测试。

  2. 支撑测试: Stub 在测试中起到支撑作用,使得测试可以在没有完整实现或外部依赖的情况下进行。

  3. 临时性: Stub 通常是临时的,专为测试目的而创建。它们不像完整的实现那样是永久性的解决方案。

  4. 可控性: 使用 Stub,可以在测试中精确控制输入和行为,就像一个固定的“桩”一样,不会随外部环境变化。

因此,“Stub”这个术语形象地描述了其在测试中的角色:一个简单且稳定的替代物,帮助开发者在不依赖完整实现的情况下进行测试。

posted on   卡米i  阅读(148)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示