Stubとは?

4158 ワード

Stub杭


どうして杭と呼ぶのか、私にはわかりません.
もっと多いのはテスト概念です.test stubマーティンの説明を見てみましょう.
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.
1つのオブジェクトには、テストで呼び出されるメソッドがカプセル化され、テスト結果が出力されます.しかし、これはテスト呼び出しと応答にすぎず、すべての方法は実現されません.このオブジェクトはstubと呼ばれます

ちなみにMock(ポイントではありません)


ここで主にstubと言っていますが、mockはポイントではありません.テストのポイントは、入力、シミュレーション依存出力、出力結果の検証です.テストの前に、stubはテストの必要性のために、必要なanswersをオブジェクトにカプセル化しました.例は次のとおりです.
public interface MailService {
  public void send (Message msg);
}
public class MailServiceStub implements MailService {
  private List messages = new ArrayList();
  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());
  }
}

最終的に、彼ら2人は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には2つの意味があります.*既存の機能コードの をシミュレートするのは、外在的な表現にすぎません.test stubはこれに属しています.*未開発のコードの .AIDLが自動的に生成するStubクラスはこれに属し,このネーミングは実装者にここで実装する方法があることを通知する.