ASP.NET MVC 5에 대해 단위 테스트 및 Moq를 사용하는 방법을 배우고 있습니다. 컨트롤러 중 하나의 인덱스 동작에 대한 첫 번째 단위 테스트를 작성하려고합니다.Moq을 사용하여 데이터베이스에서 목록을 반환하는 내 색인 작업을 테스트하려면 어떻게해야합니까?
다음은 색인 조치를위한 코드입니다.
[Authorize]
public class ExpenseController : Controller
{
private ApplicationDbContext db = new ApplicationDbContext();
// GET: /Expense/
public ActionResult Index()
{
return View(db.Expenses.ToList().Where(m => m.ApplicationUserId == User.Identity.GetUserId()));
}
}
난 그냥 돌아보기 물론이
[TestMethod]
public void ExpenseIndex()
{
// Arrange
ExpenseController controller = new ExpenseController();
// Act
ViewResult result = controller.Index() as ViewResult;
// Assert
Assert.IsNotNull(result);
}
같은
뭔가 null가 아닌 것으로 확인되어하고 싶은 모든이 때문에 데이터베이스에 연결하는 작동하지 않습니다 그리고 ApplicationUserId
을 사용하면 moq 및 유닛 테스트에 도움이 될 것입니다. 또는 ASP.NET MVC에서 조롱하는 것에 익숙해 질 수있는 자습서를 권해드립니다. 추상적 인 예를 들어, 가상 방법 의존성을 캡슐화
에이 작업을 수행하는
Abstract 데이터베이스/dbcontext에 대한 의존성을 추상화 한 다음 컨트롤러로 조롱 할 수 있습니다. – Nkosi
@Nkosi 자세한 정보를 제공해 주시겠습니까? 고맙습니다. – Baso
컨트롤러가'ApplicationDbContext'에 강하게 의존하여 유닛 테스트를 조롱하기가 어렵습니다. dbcontext의 기능을 노출하는 추상화를 상속하려면 dbcontext를 리팩토링해야하며 컨트롤러는 concretion 대신 추상화에 의존해야합니다. 거기에서 DI 프레임 워크를 사용하여 컨트롤러에 의존성을 주입 할 수 있습니다. 이제는 필요에 따라 테스트에서 모의 구현으로 추상화를 대체 할 수있는 유연성을 갖게됩니다. – Nkosi