¿Qué significa stubbing en programación?

Respuestas:

30

Un método de código auxiliar es un método que simplemente devuelve un resultado simple pero válido (aunque no necesariamente correcto).

Por lo general, se realizan al construir la infraestructura y no desea perder tiempo en todos los métodos necesarios en este momento. En su lugar, crea apéndices para que todo se compile y el autocompletado de su IDE conozca los métodos que planea usar.

Otro lugar donde se usan los apéndices es en burlarse durante las pruebas. Usted proporciona métodos de apéndices en lugar de la dependencia normal a través de la inyección de dependencia que devuelve resultados fijos y luego se asegura de que el código haga lo correcto con ellos. Esto aísla las pruebas del código que está tratando de probar y significa que no necesita girar una base de datos solo para ejecutar esas pruebas.

monstruo de trinquete
fuente
3
Nitpick: los trozos se usan al tropezar, no cuando se burlan. Cuando te burlas, usas simulacros. martinfowler.com/articles/mocksArentStubs.html
Jörg W Mittag
+1 para lo anterior, pero me gustaría agregar que, si todavía no espera que se usen los métodos con código auxiliar, puede ser útil que los códigos auxiliares arrojen una excepción o den como resultado un error. Ejemplo "NotImplementedException": msdn.microsoft.com/en-us/library/… commons.apache.org/proper/commons-lang/javadocs/api-release/org/…
Dan Armstrong
6

Quizás esto se responda mejor con un ejemplo concreto. Consideremos el caso en el que está creando una aplicación de escritorio. Usted ha decidido tener una función llamada createMenubar, createToolbary createMainpara que su constructor de la aplicación es limpia y ordenada.

Su código principal se verá más o menos así (este ejemplo está en Python):

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

Hasta que tenga todo funcionando, su función principal fallará, entonces, ¿cómo puede probar su aplicación durante el desarrollo? Por ejemplo, si comienza a trabajar createMenubar, la inicialización fallará después de crear la barra de menú ya que no ha implementado la barra de herramientas o el área principal de la GUI.

Aquí es donde entran los apéndices. Puede crear una función llamada createToolbary createMainque satisfaga el requisito del constructor de la aplicación (es decir, que estas funciones existan), sin tener que implementarlas realmente. Estas funciones son stubs:

def createToolbar():
    pass

def createMain():
    pass

Con esos apéndices en su lugar, puede comenzar a implementar el programa principal y la barra de menú, sin tener que preocuparse por los detalles de la barra de herramientas o la parte principal del programa. Eventualmente pasará a la barra de herramientas y reemplazará el trozo con la función real. Y finalmente, eliminará el código auxiliar createMainy le dará una implementación real.

Tenga en cuenta que los trozos no necesariamente tienen que hacer nada. Estos trozos podrían, por ejemplo, crear un widget de contenedor vacío que el constructor de la aplicación puede diseñar. El punto es que usted crea funciones u objetos ficticios que hacen lo suficiente para permitir que su otro código se ejecute mientras lo está desarrollando. Con el tiempo, reemplaza los talones uno por uno hasta que se complete su solicitud.

Bryan Oakley
fuente
2

Se utiliza un "trozo" en la programación "de arriba hacia abajo". Es entonces cuando está compilando su aplicación de lo general a lo específico. Al hacerlo, utilizará "apéndices" como "marcadores de posición" para las aplicaciones específicas que no ha tenido tiempo de crear. A menudo devuelven cosas como valores ficticios o aleatorios a la parte más general del programa. Eso está bien, el trozo alimenta un valor suficiente para que funcione la parte más "senior" del programa. Hasta que sea hora de que el trozo sea reemplazado o ajustado con su verdadero cálculo o valor.

Tom Au
fuente