2012-05-02 2 views
2

단위 테스트가 처음입니다. asp.net mvc3 및 s # arp lite를 사용하는 웹 응용 프로그램이 있습니다. 이 응용 프로그램에 단위 테스트를 추가하고 싶습니다. 지금까지 컨트롤러 클래스의 각 동작에 대한 테스트를 수행했습니다. 그냥 궁금 해서요, 그 밖에 내가 시험 할게있어? 뷰를 테스트해야합니까?ASP.NET MVC3 프로젝트에서 단위 테스트는 어떻게해야합니까?

다른 질문, 내가 온라인에서 찾은 모든 테스트 예제는 moq 또는 가짜 데이터를 만드는 다른 도구를 사용하고 있습니다. 실제 데이터베이스를 다시 테스트해야합니까?

답변

5

단위 테스트 뷰도 실제 데이터베이스도 테스트해서는 안됩니다. 컨트롤러 액션, 액션 필터, HTML 도우미, 모델, C#으로 작성된 것과 같은 코드 수준 아티팩트에 대한 단위 테스트를 사용하십시오.

실제 데이터베이스와 뷰를 테스트하려면 통합 테스트를보십시오. 통합 테스트는 단위 테스트와 같지 않지만 nunit 같은 단위 테스트 프레임 워크를 사용하여 실행할 수 있습니다. 기본적으로 Selenium WebDriver 또는 Watin과 같은 것을 사용하여 브라우저를 구동하는 테스트 코드를 작성하기 만하면됩니다. 그러나 이것은 실제로 단위 테스트가 아니며 통합 테스트, 종단 간 테스트 또는 사용자 승인 테스트입니다.

1

보기에 논리가 없으면 단위 테스트를하지 않아도됩니다. 예를 들어 다음을 사용하여 중요한 기본 시나리오를 다루는 몇 가지 엔드 투 엔드 테스트를 통해 단위 테스트를 보완 할 수 있습니다. 셀렌.

예, 단위 테스트와 함께 데이터베이스로 이동하는 통합 테스트가 필요합니다.

2

버그가있을 수있는 것을 테스트하십시오. 뷰는 테스트하기가 다소 어렵지만 나쁜 생각은 아닙니다. 세부 사항을 찾고 있다면 사용자 정의 속성, 이벤트, 정적 메소드, 확장 메소드 및 기타 유틸리티를 테스트하십시오.

데이터베이스를 테스트하는 경우 테스트 전용 데이터베이스인지 확인하십시오. 많은 ORM은 데이터베이스를 모의 할 수있는 방법을 제공합니다.

저는 개인적으로 Ayehde (www.ayende.com) 제품의 팬이며 Rhino.Mocks와 RavenDB를 저의 조롱 프레임 워크와 데이터베이스로 사용하고 있습니다.

1

프레임 워크 코드가 아닌 코드를 테스트하기 때문에 정의에서 우리는 단위 테스트의 대상을 말할 수 없습니다. 그리고 우리는 당신의 코드가 무엇인지 모른다. 너만 해.

단위 테스트 프레임 워크 코드에는 아무런 의미가 없으며 이미 테스트를 마쳤습니다. 논리를 다루는 테스트를 작성하는 데 집중해야합니다.

4

"테스트 지루 때까지"라고되고 그건

, 통합 테스트를 통해 시험의 대부분을 수행 조심. 즉, 한 번에 한 가지씩 테스트하십시오. 예를 들면. 당신은

  • 컨트롤러 로직
  • 라우팅 로직
  • 데이터베이스
  • 로드 방법
  • 조회수

하지만 같은 시험에서 2 개 이상을 테스트하지 않는 시험에 관심이있을 수 있습니다 . 컨트롤러 로직을 테스트하는 경우 사용중인 데이터 객체를 전달하거나 조롱하십시오.

그렇다면이 부분을 테스트하는 방법에 관심이있을 것입니다. 나는 아래의 3 개 부분 (데이터베이스로드 기능, 뷰)를 다룰 것이다

데이터베이스 당신이 연결되어있는 데이터베이스

  1. 에서 테스트 할 필요가 정말로 단지 2 가지가

    ?

  2. 는 데이터베이스의 메타 데이터를 테스트하는 방법에는 여러 가지가 연결을 위해

올바른 스키마, 나는 에코 테스트

Assert.AreEqual(42, QuerySingleResult("Select 42")); 

을 선호입니다,하지만 당신이 버전 번호가있는 경우 저장되는 , 당신은 단순히 그것을 테스트 할 수 있습니다. 또한 경로를 쉽게 업그레이드 할 수 있습니다.

Assert.AreEqual(6, QuerySingleResult("Select version From Schema")); 

로드 기능 로딩 기능을 테스트하는 방법에는 여러 가지가 있습니다

은 (내가 여기에 간단한 보여주지)하지만 그들은 모두 함수로로드를 분리에 따라 달라집니다.

테스트 LINQ는에 ...의 당신이 지금 테스트하기 쉬운이 개 기능

IEnumerable<People> LoadPeople() 
{ 
return LoadPeople(new EntityFrameworkContext().People); 
} 
IEnumerable<People> LoadPeople(IEnumerable<People> fromPeople) 
{ 
return From db in fromPeople Where ...... Select .... 

} 

로이 분할 경우

var people = From db in new EntityFrameworkContext().People Where ...... Select .... 

있다고 가정 해 봅시다 . 뷰 테스트하기 쉬운 반면

조회수

, 많은 세부 사항이있다. 나는 모든 것을 비디오에 당신을 참조 것 : http://www.youtube.com/watch?v=SttlPzwJw3U

하지만이 개 중요한 부분

1

) 시험

MvcApprovals.VerifyMvcPage(new YourController().YourTestAction 

2) 컨트롤러에서 테스트 솔기이다

public ActionResult YourTestAction() 
{ 
    // setup your model 
    return View("viewpage", model); 
} 

해피 테스트!

관련 문제