Hay un montón de sobrecarga en el uso de pepino para las pruebas unitarias. No solo tiene que escribir las características, sino luego asignarlas a la implementación usando un bit de código separado.
Las pruebas unitarias deben ser muy rápidas de escribir y muy rápidas de ejecutar. Naturalmente, pepino se centra en la experiencia del usuario final, principalmente debido al lenguaje utilizado para escribir una característica.
Sólo para refrescar, una característica podría contener lo siguiente:
Como algunos de los interesados de un sistema
me gustaría realizar una actividad
Para que pueda obtener algún beneficio de ella
Given a precondition
When I perform an action
Then something should happen
El párrafo inicial, que a menudo se ignora, es muy importante, ya que establece un cont ext para la operación y explica por qué sucede algo. Debido al uso del lenguaje natural, estas cosas son fáciles de mostrar a los no programadores a fin de obtener algunos comentarios.
Ahora, usar estos para pruebas unitarias parecería incómodo en el mejor de los casos. En primer lugar, el enfoque del usuario final sugiere un enfoque de integración más, ya que la característica no dice nada acerca de los simuladores y la separación UI/lógica. Es decir. una función como la siguiente sólo parece raro:
Given a that a database mock is configured with the following data
| ID | Username |
| 0 | igor |
When call FindAll on User Repository
Then I get the following user back
| ID | Username |
| 0 | igor |
Además, como el SUT se hace más pequeño (es decir, una clase), el contexto de la operación no es tan importante. Un repositorio de usuario no se preocupa por el contexto, p. no importa si el consumidor es un usuario normal o un usuario VIP. Un componente simple (que debería ser, después de SRP), es completamente determinista en función de sus entradas.
Por lo tanto, la prueba unitaria está ahí para validar que lo que escribió es correcto y la prueba de cucmber está ahí para validar que lo que escribió satisface un propósito más elevado al poner el comportamiento del sistema en un contexto.
JBehave 1.0 fue primero - originalmente con mecanismos separados para ejemplos de clase/pruebas y escenarios. Este fue el momento de JUnit 3.8 - JUnit 4.4 hizo innecesario el ejemplo de clase. Dan North (fundador de BDD y JBehave) desarrolló RBehave, luego el equipo de RSpec lo integró, luego David Chelimsky lo hizo usar texto plano y lo dividieron en una biblioteca separada. Creo que Aslak Hellesoy dirigió esto. Luego reescribimos JBehave 2.0 basado en Cucumber. Para interés histórico: http://blog.davidchelimsky.net/2007/10/25/plain-text-stories-part-iii/ – Lunivore
Ah, y Cucumber es un poco más lento para escribir. Vea mi respuesta por la razón y los problemas que resuelven los marcos. – Lunivore