DbContextScope icon indicating copy to clipboard operation
DbContextScope copied to clipboard

Constrain on IDbContext instead of DbContext for easier unit testing and mocking

Open benjaminramey opened this issue 10 years ago • 2 comments

Because the TDbContext generics are constrained with where TDbContext : DbContext, I have to call all the relevant methods with concrete class types. This makes for more difficult unit testing because I will eventually have to mock a concrete DbContext class somewhere.

If we instead constrain on the new IDbContext that only defines methods that the library needs (and DbContext already implements), then I can inherit this interface on my DbContext interfaces and mock much easier.

This is a breaking change, of course, because any client code that would upgrade to this change would need to implement the IDbContext interface on all their client DbContexts.

benjaminramey avatar Nov 13 '15 19:11 benjaminramey

Is there any chance for this to supported at some point? I too am having difficulty with unit testing because the IAmbientDbContextLocator.Get method is not constrained on an interface.

thorhj avatar Feb 14 '17 20:02 thorhj

I also wonder why this wasn't incorporated. I'm using this interface with Fake Contexts (generated using https://github.com/sjh37/EntityFramework-Reverse-POCO-Code-First-Generator ) and it's working fine.

Drizin avatar Mar 03 '18 06:03 Drizin