2011-12-27 4 views
0

I가 잘 인식 소스에서 다음 샘플 컨트롤러 코드 :간단한 MVC ASP.Net 테스트

public class HomeController : Controller 
{  
    MyStoreEntities storeDB = new MyStoreEntities(); 

    public ActionResult Index() 
    {  
     var albums = GetTopSellingAlbums(5);  
     return View(albums); 
    } 

    private List<Album> GetTopSellingAlbums(int count) 
    {    
     return storeDB.Albums 
      .OrderByDescending(a => a.OrderDetails.Count()) 
      .Take(count) 
      .ToList(); 
    } 
} 

내가 5 앨범 (색인에서 반환되는 것을 확인하는 아주 간단한 테스트를 작성 할) 방법 .

은 내가 그것을 할 수 같은 것을 같은 것을 생각 :

HomeController controller = new HomeController(); 
var result = controller.Index() as ViewResult; 
var albums = (List<Album>)result.ViewData; 
Assert.AreEqual(5, albums.Count); 

그러나 model.Count의 값은() 나는 실종, 첫째로 항상 뭔가 0

- 그것은 가능하다 ?

두 번째로, 나는 레거시 코드에 관한 많은 원칙을 배우기 위해이 작업을 수행하고 있습니다. 나는이 코드를 가지고있다. 나는이 코드를 심각하게 개선 할 수있다. 또한 테스트가 없습니다.

내 계획은 기존 코드를 테스트로 처리하고 심각하게 수정하는 것입니다.

그래서 여기에 '나쁜 습관'같은 응답이 없거나이 레이어 나 그 패턴 등이 나중에 구현 될 것이라고 구현하지 마십시오. 정말

이 어쩌면 좋은 블로그 나 책도 도움이 될 것입니다 :)하시기 바랍니다 도움이 될 것이다 위의 코드를 테스트

그냥 간단한 방법.

감사

데비

+0

데이터베이스에 앨범 데이터가 있습니까? 테스트와 동일한 DB에 연결되어있을 때 컨트롤러가 속한 웹 사이트에 데이터가 표시됩니까? 테스트와 웹 사이트에서 동일한 db 연결 문자열을 사용합니까? – k3b

답변

0

이 더 나은이 소스 코드 ""레거시 코드보다

+0

그래, 필자는 Micheal Feathers라는 책을 읽을 수있는 목록에 올려 놓았습니다. – davy

0

당신은 ViewDataDictionary 클래스의 Model 속성 모델에 액세스 할 수 있습니다 : 당신이 레거시 코드 작업에 대한 학습에 관심이 있다면

albums = (List<Album>)result.ViewData.Model; 
+0

응답 주셔서 감사합니다 Jan - 그러나 앨범 수는 항상 0이고 절대로 5가 아닙니다. ( – davy

+0

GetTopSellingAlbums를 디버깅 할 때 5 개의 앨범이 반환됩니까? –