dingus es algo así como un objeto de burla. La principal diferencia es que usted no configura expectativas antes de tiempo. Usted acaba de ejecutar su código, usando un dingus en lugar de otro objeto o clase, y va a grabar lo que sucede con él. Luego, una vez que se ha ejercido su código, puede hacer afirmaciones sobre lo que hizo a los dingus.
Un nuevo dingus se crea a partir de la clase Dingus. Puede poner nombres dinguses, lo que ayuda con la depuración de sus pruebas, sobre todo cuando hay múltiples dinguses en juego.
& Nbsp; >>> from dingus importan Dingus
& Nbsp; >>> d = Dingus ('root')
& Nbsp; >>> d
& Nbsp;
Acceso a cualquier atributo de un dingus volverá un nuevo dingus.
& Nbsp; >>> d.something
& Nbsp;
Hay algunas excepciones para los métodos Dingus especiales. Vamos a ver algunos en un poco.
Un dingus también puede ser llamado como una función o método. No importa cuántos argumentos que le dan o lo que esos argumentos son. Las llamadas a un dingus siempre devolverá el mismo objeto, independientemente de los argumentos.
& Nbsp; >>> d ()
& Nbsp;
& Nbsp; >>> d ('argumento')
& Nbsp;
& Nbsp; >>> d (55)
& Nbsp;
GRABACIÓN Y AFIRMACIONES
En cualquier momento podemos obtener una lista de las llamadas que se han hecho a un dingus. Cada entrada en la lista de llamadas contiene:
& Nbsp; * el nombre del método llamado (o "()" si el propio dingus se llamaba)
& Nbsp; * Los argumentos, o () si ninguno
& Nbsp; * Los argumnets de palabras clave, o {} si ninguno
& Nbsp; * El valor que fue devuelto a la persona que llama
Aquí está una lista de las llamadas que hemos hecho para d hasta el momento:
& Nbsp; >>> from pprint pprint importación
& Nbsp; >>> pprint (d.calls)
& Nbsp; [('()', (), {},
& Nbsp; ('()', ('argumento',), {},
& Nbsp; ('()', (55,), {},
Puede filtrar las llamadas por su nombre, los argumentos y los argumentos de la palabra clave:
& Nbsp; >>> pprint (d.calls ('()', 55))
& Nbsp; [('()', (55,), {},
Si no se preocupan por el valor de un argumento en particular, puede utilizar el DONTCARE valor al filtrar:
& Nbsp; >>> from dingus importan DONTCARE
& Nbsp; >>> pprint (d.calls ('()', DONTCARE))
& Nbsp; [('()', ('argumento',), {},
& Nbsp; ('()', (55,), {},
Dinguses pueden hacer algo más que tiene atributos que se accede y se llama. Apoyan a muchos operadores de Python. El objetivo es permitir, y registrar, cualquier interacción:
& Nbsp; >>> d = Dingus ('root')
& Nbsp; >>> (2 ** d.something) ['hola'] () / 100 * 'foo'
& Nbsp;
(Esperemos que sus grabaciones Dingus del mundo real no se verá como esto!)
REMENDAR
Dingus proporciona un gestor de contexto para parchear objetos durante las pruebas. Por ejemplo:
& Nbsp; >>> from parche importación dingus
& Nbsp; >>> urllib2 importación
& Nbsp; >>> con parche ('urllib2.urlopen'):
& Nbsp; ... print urllib2.urlopen .__ class__
& Nbsp; <'dingus.Dingus' clase>
& Nbsp; >>> print urllib2.urlopen .__ class__
& Nbsp;
También puede utilizar esto como un decorador de sus métodos de ensayo:
& Nbsp; >>>patch ('urllib2.urlopen')
& Nbsp; ... def test_something (self):
& Nbsp; ... pase
& Nbsp; ...
MAGIC PELIGROSO
Dingus también puede reemplazar automáticamente globales de un módulo al ejecutar pruebas. Esto le permite escribir pruebas unitarias totalmente aislados. Ver ejemplos / urllib2 / test_urllib2.py para un ejemplo. El autor ya no recomienda esta característica, ya que puede animar a pruebas muy frágiles. Usted debe sentir el dolor de las dependencias burlones manualmente; . el dolor le dirá cuando una clase colabora con muchos otros
Requisitos :
- Python
Comentarios que no se encuentran