En lugar de burlarse de MongoDB, debe burlarse de una capa en la parte superior de MongoDB.
Es posible que desee considerar una interfaz que expone las operaciones en su repositorio que son independientes del almacén de datos subyacente. Por ejemplo, es posible que desee una interfaz que abstrae a cabo operaciones en Student
tipos, así:
public interface IStudentOperations
{
void Add(Student student);
}
Al crear otras dependencias, se inyecta instancias de la interfaz anterior, o cualquier abstracciones de alto nivel que elija.
El punto es, no exponer MongoDB directamente.
Una vez hecho esto, puede simular las interfaces que crea todo lo que desea, teniendo una implementación para probar contra la implementación simulada y luego una implementación real con sus propias pruebas para validar que las operaciones en la implementación son correctas cuando la implementación subyacente es con MongoDB.
Si bien es definitivamente possible to mock most of MongoDB's classes (as the methods are virtual
), obtiene el beneficio de ser independiente de la persistencia; si quiere cambiar a decir, CouchDB o elasticsearch, no tiene que cambiar las llamadas a estas interfaces, simplemente crea una nueva implementación.
Debido you are trying to test the implementation of the repository, a continuación, son en general muy bien, como se ha dicho antes, la mayoría de las funciones de MongoDB son virtual
, que es amigable con la mayoría de las bibliotecas burlones.
Dicho esto, usted tiene que asegurarse de que se pase el MongoDatabase
en su repositorio (no crearlo en el repositorio) para que en sus pruebas de unidad, puede crear la maqueta correspondiente y luego pasar en su implementación de repositorio para la prueba.
Aunque estoy de acuerdo con casperOne, lo haría Es posible burlarse de las clases del controlador MongoDB con la mayoría de los frameworks de burla ya que los métodos públicos son virtuales. – kfuglsang
Usaré un patrón de repositorio. SO, necesito burlarme de All, Save y otros. Es por eso que necesito un mongo falso – F0rc0sigan
@kfuglsang Respuesta actualizada con los beneficios de no burlarse de MongoDB directamente. – casperOne