Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to unit test ASP.NET MVC Controller without Using Repository Pattern

I am just wondering if there a way I can unit test some of my controller Action in MVC without using Repository pattern. I have develop an ASP.NET MVC site but did this without unit testing at the initial stage. Now I want to demonstrate some unit test to my tutor using may be two or more action in my controller. Most of my actions logic get data from database and one controller get data from different tables i.e actions in one controller read from different table. which I think that can be test using Generic Repository pattern. As a beginner I found that I can only unit test a code that is not coming from database but unfortunately most of the code in my controller Actions come from database. i am using the default test tool in visual Studio and EF code first approach for my database.
for example i will like to unit test only the below Actions without having to unit test other action that are in the same controller.

public ActionResult Index()
    {
        var model = _db.PhotoGallery;
        return View(model);
    }

This is just for demonstration purpose.

like image 934
Johnson Duru Avatar asked Apr 10 '12 15:04

Johnson Duru


1 Answers

By definition, a unit test should only affect the method that it calls. If you can find a way to mock your _db object so that you're not actually causing a database round-trip, then you can unit test this method that relies on it. Otherwise, no.

Is your _db field's type an interface? Is it being provided via injection? If so, it's likely that you can unit test this method.

like image 186
StriplingWarrior Avatar answered Sep 22 '22 18:09

StriplingWarrior