O que significa stubbing na programação?

Respostas:

30

Um método stub é um método que apenas retorna um resultado simples, mas válido (embora não necessariamente correto).

Eles geralmente são feitos ao criar a infraestrutura e você não deseja gastar tempo com todos os métodos necessários no momento. Em vez disso, você cria stubs para que tudo seja compilado e o preenchimento automático do IDE saiba sobre os métodos que você planeja usar.

Outro lugar em que os stubs são usados ​​é a zombaria durante o teste. Você fornece métodos de stub em vez da dependência normal através da injeção de dependência, que retorna resultados fixos e garante que o código faça a coisa certa com eles. Isso isola o teste do código que você está tentando testar e significa que você não precisa gerar um banco de dados apenas para executar esses testes.

catraca arrepiante
fonte
3
Nitpick: stubs são usados ​​ao stub, não ao zombar. Ao zombar, você usa zombarias. martinfowler.com/articles/mocksArentStubs.html
W W Mittag
+1 para as opções acima, mas eu gostaria de acrescentar que, se você ainda não espera que os métodos stubbed sejam usados, pode ser útil fazer stubs lançar uma exceção ou resultar em um erro. Exemplo "NotImplementedException": msdn.microsoft.com/en-us/library/… commons.apache.org/proper/commons-lang/javadocs/api-release/org/…
Dan Armstrong em
6

Talvez isso seja melhor respondido com um exemplo concreto. Vamos considerar o caso em que você está criando um aplicativo de desktop. Você decidiu ter uma função nomeada e createMenubar, assim, seu construtor de aplicativos é limpo e arrumado.createToolbarcreateMain

Seu código principal será mais ou menos assim (este exemplo está em python):

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

Até que você tenha tudo funcionando, sua função principal falhará. Como você pode testar seu aplicativo durante o desenvolvimento? Por exemplo, se você começar a trabalhar createMenubar, a inicialização falhará após criar a barra de menus, pois você não implementou a barra de ferramentas ou a área principal da GUI.

É aí que entram os stubs. Você pode criar uma função nomeada createToolbare createMainque atenda aos requisitos do construtor de aplicativos (a saber, que essas funções existem), sem ter que implementá-las. Essas funções são stubs:

def createToolbar():
    pass

def createMain():
    pass

Com esses stubs no lugar, você pode começar a implementar o programa principal e a barra de menus, sem ter que se preocupar com os detalhes da barra de ferramentas ou da parte principal do programa. Eventualmente, você passará para a barra de ferramentas e substituirá o stub pela função real. E, finalmente, você removerá o stub createMaine dará uma implementação real.

Observe que os stubs não precisam necessariamente fazer nada. Esses stub podem, por exemplo, criar um widget de contêiner vazio que o construtor do aplicativo pode criar. O ponto é que você cria funções ou objetos fictícios que fazem apenas o suficiente para permitir que seu outro código seja executado enquanto você o desenvolve. Com o tempo, você substitui os stubs um por um até que seu aplicativo seja concluído.

Bryan Oakley
fonte
2

Um "esboço" é usado na programação "de cima para baixo". É quando você está construindo seu aplicativo do geral para o específico. Ao fazer isso, você usará "stubs" como "espaços reservados" para aplicativos específicos que você não teve tempo de criar. Eles geralmente retornam itens como valores fictícios ou aleatórios para a parte mais geral do programa. Tudo bem, o stub alimenta um valor suficiente para fazer a parte mais "sênior" do programa funcionar. Até que seja hora de o stub ser substituído ou ajustado com seu verdadeiro cálculo ou valor.

Tom Au
fonte