¿Cómo desacoplar un nivel medio y un conjunto de datos para permitir la prueba de la unidad?

StackOverflow https://stackoverflow.com/questions/153291

  •  03-07-2019
  •  | 
  •  

Pregunta

Tengo una pregunta en SO preguntando cómo conectar un nivel medio a un DataSet.

Puse una respuesta mostrando lo que había encontrado, pero no estoy contento con el acoplamiento apretado. Acabo de comenzar a realizar pruebas y creo que es un buen objetivo para mi código.

¿Cómo se desacoplaría este código para permitir la prueba unitaria?

Gracias,
Keith

¿Fue útil?

Solución

IMO; Los conjuntos de datos son malvados. Son, y solo deben usarse como bases de datos fuera de línea. Nada más, IMO. Sin embargo, lo que haga en su capa de acceso a datos (DAL) no debería afectar realmente a su capa de negocios (BL). Solo usaría objetos (usar interfaces) entre ellos (IList) y luego utilizaría una interfaz para definir su DAL (IRepository) y el nyou puede simularse de esa interfaz para devolver lo que necesite en su BL para pruebas de unidad. Pruebas unitarias Los conjuntos de datos son otra bestia, nunca lo probé y espero que nunca tenga que ... Quizás una mejor base de datos en la memoria es ...

Ah, y para burlarme he usado RhinoMock con cierto éxito. También lo aliento a que busque en IoCs ( http://www.castleproject.org/ ).

Otros consejos

Necesita IOC (inversión de control) y objetos simulados.

Lo invito a ver dnrTV episode 126 con James Kovacs.

Demuestra exactamente lo que estás buscando.

¿Has probado Spring.net ? Hará su código más limpio y menos acoplado. También proporciona clases útiles para hacer tus pruebas de integración.

Depende de lo que quieras probar:

  • ¿Desea probar la recuperación de datos de la base de datos?
  • ¿Construyendo los objetos a partir de los conjuntos de datos?
  • ¿Se inserta o actualiza la base de datos?
  • Y así sucesivamente ...

Aquí hay una sugerencia:

Una orden contiene todos sus hijos. Esto es un agregado, un todo. Obtienes un pedido con detalles de un repositorio:

var order = repository.GetOrderBy(id);

El repositorio obtiene los datos de la base de datos:

var dataset = orderDatabase.GetOrderAndDetailsBy(id);

El repositorio podría usar un generador para crear el orden:

var order = orderBuilder.CreateOrderAndDetailsFrom(dataset);

Tendría que crear un repositorio de la siguiente manera:

var repository = new OrderRepository(orderDatabase, orderBuilder);

Ahora puedes crear un repositorio con colaboradores falsos, dependiendo de lo que quieras probar.

Si tiene objetos de entidad, puede usar simulacros para realizar pruebas unitarias en su nivel intermedio.

RWendi

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top