el problema es que si utiliza su técnica de configuración de una base de datos, apertura de transacciones y retroceso, sus pruebas unitarias dependerán del servicio de base de datos, conexiones, transacciones, red y demás. Si se burla de esto, no hay dependencia de otras piezas de código en su aplicación y no hay factores externos que influyan en los resultados de la prueba de la unidad.
El objetivo de una prueba unitaria es probar la pieza más pequeña de código comprobable sin involucrar otra lógica de aplicación. Esto no se puede lograr al usar su técnica IMO.
Hacer que su código sea comprobable mediante la abstracción de su capa de datos, es una buena práctica. Hará que su código sea más robusto y más fácil de mantener. Si implementa un patrón de repositorio, burlarse de sus llamadas a la base de datos es bastante fácil.
También las pruebas unitarias y las pruebas de integración satisfacen diferentes necesidades. Las pruebas unitarias deben probar que una pieza de código está trabajando técnicamente y atrapar casos de esquina. Las pruebas de integración verifican las interfaces entre los componentes frente a un diseño de software. Las pruebas unitarias por sí solas no pueden verificar la funcionalidad de una pieza de software.
HTH