Somewhere deep in your data access code you have.
using (var transaction = _unitOfWork.DbConnection.BeginTransaction())
{
await _unitOfWork.SomeRepository.Delete(id).ConfigureAwait(false);
await _unitOfWork.SomeRepository.DeleteSomethingElse(id).ConfigureAwait(false);
transaction.Commit();
}
The details in the transaction are not important. Mocking the Delete and the DeleteSomethingElse method is easy enough, but its wrapped in a transaction. So how do we get to mock that using MOQ in our unit test?
var mockUnitOfWork = new Mock<IUnitOfWork>();
mockUnitOfWork.Setup(uow => uow.DbConnection.BeginTransaction())
.Returns(new Mock<DbTransaction>().Object);