I’ve seen a number of samples on how to set up a unit test class for ASP.NET MVC 3 using Ninject and Moq, but they all involve building a mock repository inside the test class.
What I’d like to do is build the mock repository on app start or load – so, perhaps in Global.asax.cs – and pass this to my test class instead. That way I can change to a session-state repository or a database repository in my Ninject AllBindings() method without having to change the unit test class. I already have this in app start:
ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());
I can even grasp putting a Bind command in global.asax.cs, but how would it get passed to the test class? When you select Test > Run does it even go through global.asax.cs? I guess I’m not sure of what context, if any, calls the test class. I can’t wrap my head around how to do this, and I haven’t seen any examples that go about creating the repository first and then passing it to the test class.
Is it possible, and if so, how can it be done? Thanks in advance for any advice!
Erm, wait, I think you are missing the whole point of unit testing. A unit test resides in a separate project that is not related to a running ASP.NET application. The
Global.asaxis used only by the ASP.NET application.In your unit test you should test the different classes of your system in isolation, without relying on any ASP.NET specific classes. And if those classes depend on some other layers, such as for example a controller depending on a repository or a service layer, you could use a mock framework to define expectations to this dependency in order to test the controller in isolation. This works only if the dependency is expressed through an interface or an abstract class which can be mocked.