プログラミングでスタブは何を意味しますか?


26

「スタブ」、「何かをスタブする」、「スタブ」などという言葉をよく耳にします。

プログラミングでスタブとは何を意味し、その言葉はどこから来たのですか?どのコンテキストで使用できますか?


プレースホルダーとも呼ばれます。
ピーターB

回答:


30

スタブメソッドは、単純だが有効な(必ずしも正しいとは限りませんが)結果を返すメソッドです。

これらは通常、インフラストラクチャを構築するときに作成され、現在必要なすべての方法に時間を費やす必要はありません。代わりにスタブを作成して、すべてがコンパイルされ、IDEのオートコンプリートが使用する予定のメソッドを認識できるようにします。

スタブが使用されるもう1つの場所は、テスト時のモックです。固定の結果を返す依存性注入によって、通常の依存関係の代わりにスタブメソッドを提供し、コードがそれらで正しいことを確認します。これにより、テストをテストしようとしているコードに分離し、これらのテストを実行するためだけにデータベースを起動する必要がなくなります。


3
Nitpick:スタブはスタブ化の際に使用され、モッキングの際には使用されません。モックするときは、モックを使用します。martinfowler.com/articles/mocksArentStubs.html
イェルクWミッターク

上記の+1ですが、スタブ化されたメソッドがまだ使用されることを期待していない場合は、スタブが例外をスローするか、エラーが発生することが役立つ場合があることを付け加えます。例"NotImplementedException":msdn.microsoft.com/en-us/library/... commons.apache.org/proper/commons-lang/javadocs/api-release/org/...
ダン・アームストロング

6

おそらく、これは具体的な例で最もよく答えられるでしょう。デスクトップアプリケーションを作成している場合を考えてみましょう。あなたは、という名前の関数を持っていることにしましたcreateMenubarcreateToolbarそしてcreateMainアプリケーションのコンストラクタはきちんと整頓されるようになっています。

メインコードは次のようになります(この例はpythonにあります)。

class ExampleApp():
    def __init__(self):
        self.createMenubar()
        self.createToolbar()
        self.createMain()

すべてが機能するまで、メイン関数は失敗します。開発中にアプリをテストするにはどうすればよいですか?たとえば、で作業を開始する場合createMenubar、GUIのツールバーまたはメインエリアを実装していないため、メニューバーを作成した後に初期化は失敗します。

スタブが来る場所です。あなたが名前の関数を作成することができますcreateToolbarし、createMainその実際にそれらを実装することなく、アプリのコンストラクタ(これらの関数が存在する、すなわち、ということ)の要件を満たします。これらの関数はスタブです:

def createToolbar():
    pass

def createMain():
    pass

これらのスタブを配置すると、ツールバーの詳細やプログラムの主要部分を気にすることなく、メインプログラムとメニューバーの実装を開始できます。最終的には、ツールバーに移動し、スタブを実際の機能に置き換えます。そして最後に、スタブを削除しcreateMainて、実際の実装を行います。

スタブは必ずしも何もする必要がないことに注意してください。これらのスタブは、たとえば、アプリのコンストラクターがレイアウトできる空のコンテナーウィジェットを作成できます。ポイントは、開発中に他のコードを実行できるようにするだけのダミー関数またはダミーオブジェクトを作成することです。時間が経つにつれて、アプリケーションが完了するまでスタブを1つずつ交換します。


2

「スタブ」は「トップダウン」プログラミングで使用されます。それは、一般的なものから特定のものまでアプリケーションを構築するときです。その際、構築する時間がなかった特定のアプリケーションの「プレースホルダー」として「スタブ」を使用します。多くの場合、ダミー値やランダム値などをプログラムのより一般的な部分に返します。それは大丈夫です、スタブはプログラムのより「シニア」な部分を動作させるのに十分な値を供給します。スタブが置き換えられるか、真の計算または値に適合する時間になるまで。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.