2009-04-15 5 views
2

사람들이 컨트롤러 테스트를 구성하는 방법에 대한 깔끔한 제안을 찾고 있습니다. 나는 고정있을 수 있습니다MVC 컨트롤러 테스트를 어떻게 구성합니까?

[AcceptVerbs(HttpVerbs.Get)] 
public ActionResult Add() 
{ 
    var editAddress = new DTOEditAddress(); 
    editAddress.Address = new Address(); 
    editAddress.Countries = countryService.GetCountries(); 

    return View("Add", editAddress); 
} 

[RequireRole(Role = Role.Write)] 
[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Add(FormCollection form) 
{ 
    // save code here 
} 

예를 들어

, 내 "주소"컨트롤러의 "추가"기능을하지만 나는이 제목으로 테스트해야 두 가지 작업이 있습니다, "when_adding_an_address"라고 ...

필자의 Act() 메쏘드에서 두 가지 액션을 모두 호출하고 싶지 않으므로 조명기를 반으로 나눕니다. 어떻게 이름을 지어야합니까?

"When_adding_an_address_GET""When_adding_an_address_POST"?

것만 큼 빠르게 지저분 해지는 것처럼 보입니다.

또한 스테이트리스/setupless 컨트롤러에 대한 어설 션을 어떻게 다룰 것이며, 어떻게 위와 같은 것들을 조정합니까? 예를 들면 :

[Test] 
public void the_requesting_user_must_have_write_permissions_to_POST() 
{ 
    Assert.IsTrue(this.SubjectUnderTest.ActionIsProtectedByRole(c => c.Add(null), Role.Write)); 
} 

이 내가 아는 사용자 지정 코드입니다,하지만 당신은 아이디어를 얻을해야합니다, 그것은 단순히 필터 속성이 방법에 존재하는지 확인합니다. 중요한 것은 Arrange() 또는 Act()이 필요하지 않다는 것입니다.

모든 도움말을 환영합니다!

감사합니다.

답변

0

음, 13 개월 후 답변이 없습니다. 굉장해.

Heres는 내가 지금 무엇을 : 제 생각에는 당신이 테스트하는 방법 후 테스트를 이름에 대해 잊지한다에서

/tests/controllers/address/add/get.cs 
/tests/controllers/address/add/valid.cs 
/tests/controllers/address/add/invalid.cs 
1

. 사실 하나의 방법을 테스트하는 것은 이상한 개념입니다. 클라이언트가 코드로 수행 할 단일 작업을 테스트해야합니다. 예를 들어, POST와 GET을 사용하여 add를 칠할 수 있다면 제안한 것처럼 두 가지 테스트를 작성해야한다. 특정 예외 상황에서 어떤 일이 일어나는지보고 싶다면 다른 테스트를 작성해야합니다.

나는 보통 그가 자바 알아야 할 어떤 메인테이너에게 이름 선택 :

@Test public void shouldRedirectToGetWhenPostingToAdd(){ 
    //... 
} 

당신은 어떤 언어로이 작업을 수행하고 만약 당신이 좋아하면 어떤 * DD 명명 규칙을 선택할 수 있습니다,하지만 요점은 것입니다 테스트 이름은 기대와 시나리오를 전달해야합니다. 이런 식으로 아주 작은 테스트를 받게 될 것이고 나는 이것을 좋은 것으로 생각합니다.

관련 문제