2009-04-25 3 views
7

ASP.NET website에 게시 된 비디오를 사용하여 ASP.NET MVC을 배우려고 노력했으며 단위 테스트를 수행하는 데 문제가 있습니다. 이것은 다음과 같은 오류와 함께 NUnit에 실패NUnit을 사용한 ASP.NET MVC 유닛 테스트

public ActionResult Index() 
    { 
     ViewData["Message"] = "Welcome to ASP.NET MVC!"; 
     using (TrainingLogDataContext dc = new TrainingLogDataContext()) 
     { 
      ViewData.Model = dc.Workouts.ToArray(); 
     } 

     return View(); 
    } 

:

나는 객체의 배열을 가져 오는 LINQ to SQL를 사용하는 매우 간단한 컨트롤러가

at TrainingLog.Models.TrainingLogDataContext..ctor() in C:\Webs\TrainingLog\TrainingLog\Models\TrainingLog.designer.cs:line 41 
at TrainingLog.Controllers.HomeController.Index() in C:\Webs\TrainingLog\TrainingLog\Controllers\HomeController.cs:line 16 
at TrainingLogTests.Controllers.HomeControllerTest.Index() in C:\Webs\TrainingLog\TrainingLog.Tests\Controllers\HomeControllerTest.cs:line 23 

것 같아요 문제가 있다는 것입니다을 NUnit를 DataContext에 대한 연결 문자열을 web.config에서 가져올 수 없습니다. 이 문제를 해결하는 가장 좋은 방법은 무엇입니까?

페이지를 실행할 때 제대로 작동하지만 NUnit에서 단위 테스트가 실패합니다.

답변

3

내가 취한 압박은 데이터 컨텍스트를 조롱하는 것이 었습니다. 저는 공장을 사용하여 데이터 컨텍스트를 만들고 그것을 컨트롤러에 주입합니다. 팩토리가 null의 경우 (파라미터가없는 생성자가 불려 갔을 때), 데이터베이스에 접속하는 팩토리의 디폴트의 인스턴스가 작성됩니다. 단위 테스트에서는 메모리에서 작동하는 가짜 데이터 컨텍스트를 만드는 팩토리를 사용합니다. 엔티티 세트를 통해 데이터베이스에 추가 된 객체를 처리하도록 확장했지만 필자는 모의 데이터 컨텍스트를 this blog에서 코드에 기반했습니다.

가짜 길을 가고 싶지 않다면 (그리고 나는 그것을 추천 할 것이다. app.config 파일을 유닛 테스트 프로젝트에 추가하고 데이터 컨텍스트에 대한 연결 문자열을 입력 할 수 있습니다.

0

계획. 그런 다음 시도하려는 작업을 수행하는 데 필요한 구성 요소를 작성할 수 있습니다.

참고 : 데이터를 조작하는 더 좋은 방법은 조롱하는 것입니다. 컨트롤러에서 쉽게 제어를 반전 할 수 없으므로 LINQ를 컨트롤러 밖으로 옮겨야합니다.

5

은 NUNIT 테스트 프로젝트에 의 app.configWeb.config의 프로젝트의 연결 문자열을 복사합니다.

+1

나를 위해 작동합니다. 감사합니다. :) – melaos

1

단위 테스트에서 데이터베이스에 액세스하지 않는 것이 가장 좋으므로 테스트 실행 속도가 너무 느려서 테스트 실행에 지장을 초래할 수 있습니다. 그러나 이것을 원한다면 NUnit 프로젝트에 app.config 파일을 만들고 거기에 연결 문자열을 배치 할 수 있습니다. 때로는 NUnit이 app.config 파일을 인식하지 못하지만 그렇게 구성하는 방법에 대한 자세한 내용은 "How to initialize ConnectionStrings collection in NUnit"에 대한 답변에서 찾을 수 있습니다.

관련 문제