谈谈何谓Stub

Stub桩

为什么叫桩,我不知道。

更多的是一种测试概念,test stub
来看看Martin的说明吧:

Stubs provide canned answers to calls made during the test, usually not responding at all to anything outside what’s programmed in for the test.

一个对象中封装了测试当中会调用的方法,并且相应输出一些测试结果。但这只是针对测试调用和响应,并不会实现所有的方法。那么这个对象就被称为stub.

顺道说说Mock(并不是重点)

这里主要说的是stub,mock并不是重点。
测试的重点就是:输入,模拟依赖输出,验证输出结果。
在测试之前,stub为了测试需要,将需要的answers已经封装到一个对象中。
例子如下:

public interface MailService {
  public void send (Message msg);
}
public class MailServiceStub implements MailService {
  private List<Message> messages = new ArrayList<Message>();
  public void send (Message msg) {
    messages.add(msg);
  }
  public int numberSent() {
    return messages.size();
  }
}                                 

class OrderStateTester...
  public void testOrderSendsMailIfUnfilled() {
    Order order = new Order(TALISKER, 51);
    MailServiceStub mailer = new MailServiceStub();
    order.setMailer(mailer);
    order.fill(warehouse);
    assertEquals(1, mailer.numberSent());
  }

mock,则不会去封装实现一个对象,而是借助mock工具来模拟依赖输出an
例子如下:

class OrderInteractionTester...
  public void testOrderSendsMailIfUnfilled() {
    Order order = new Order(TALISKER, 51);
    Mock warehouse = mock(Warehouse.class);
    Mock mailer = mock(MailService.class);
    order.setMailer((MailService) mailer.proxy());

    mailer.expects(once()).method("send");
    warehouse.expects(once()).method("hasInventory")
      .withAnyArguments()
      .will(returnValue(false));

    order.fill((Warehouse) warehouse.proxy());
  }
}

最终,他们两个都是为了在测试order的时候解决mailer依赖的问题。stub和mock的区别一目了然。

再来看看定义

这是维基中对stub的定义:

A method stub or simply stub in software development is a piece of code used to stand in for some other programming functionality. A stub may simulate the behavior of existing code (such as a procedure on a remote machine) or be a temporary substitute for yet-to-be-developed code.
Stub有两种意义:
* 模拟已有功能代码的表现,只是外在表现而已哦。test stub正属于此。
* 还未开发完的代码的临时替身。AIDL自动生成的Stub类属于此,这样命名在提醒实现者这里还有待实现的方法。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值