2012-04-17 3 views
7

안녕하세요. 저는 웹 사이트를 구성하고 있으며 매우 간단합니다. 가능한 한 많은 측면을 테스트하기로 결정했습니다. 무슨 일이 일어날 지 상상할 수있는 상황을 설명 할 수있는 유용한 테스트를 작성하는 것 (스크립트 또는 CSS 파일 이름 바꾸기)간단한보기에서 테스트가 너무 많습니까?

저는 Steve Sanderson의 MVC 통합 테스트 프레임 워크를 사용하고 있습니다. 테스트는 아래와 같습니다.

내 질문은 두 가지입니다.이 수준의 테스트는 "너무 많습니다", 그렇지 않은 경우 이름 바꾸기 또는 다른 것과 같은 개발자와 관련된 다른 시나리오를 생각해 볼 수 있습니다.

using System.Web; 
using System.Web.Mvc; 
using MvcIntegrationTestFramework.Hosting; 
using NUnit.Framework; 
using website.Properties; 

namespace website.tests 
{ 
    [TestFixture] 
    public class HomeControllerIndexTests 
    { 
     [TestFixtureSetUp] 
     public void Setup() 
     { 
      appHost = AppHost.Simulate("Website"); 
     } 

     [Test] 
     public void HomeControllerIndexReturnsTheIndexView() 
     { 
      appHost.Start(session => 
      { 
       var result = session.Get("/Home/Index"); 
       Assert.AreEqual("Index", ((ViewResult)result.ActionExecutedContext.Result).ViewName); 
      }); 
     } 

     [Test] 
     public void HomeControllerIndexReturnsCorrectRouteData() 
     { 
      appHost.Start(session => 
      { 
       var result = session.Get("/Home/Index"); 
       Assert.AreEqual("Home", result.ActionExecutedContext.RouteData.Values["controller"]); 
      }); 
     } 

     [Test] 
     public void HomeControllerIndexReturnsViewResult() 
     { 
      appHost.Start(session => 
      { 
       var result = session.Get("/Home/Index"); 
       Assert.IsInstanceOf(typeof(ViewResult), result.ActionExecutedContext.Result); 
      }); 
     } 

     [Test] 
     public void HomeControllerIndexReturnsNoError() 
     { 
      appHost.Start(session => 
      { 
       var result = session.Get("/Home/Index"); 
       Assert.IsNull(result.ResultExecutedContext.Exception); 
      }); 
     } 

     [Test] 
     public void HomeControllerIndexReturnsViewWithSiteCssFile() 
     { 
      appHost.Start(session => 
      { 
       var result = session.Get("/Home/Index"); 
       Assert.IsTrue(result.ResponseText.Contains("/Content/Site.css")); 
      }); 
     } 

     [Test] 
     public void HomeControllerIndexReturnsViewWithCorrectTitle() 
     { 
      appHost.Start(session => 
      { 
       var result = session.Get("/Home/Index"); 
       Assert.IsTrue(result.ResponseText.ToLowerInvariant().Contains("<title>{ me: danielelliott.info(); }</title>")); 
      }); 
     } 

     [Test] 
     public void HomeControllerIndexReturnsViewContainingBanner() 
     { 
      appHost.Start(session => 
      { 
       var result = session.Get("/Home/Index"); 
       var expected = HttpUtility.HtmlEncode(Resources.SiteName); 
       Assert.IsTrue(result.ResponseText.Contains(expected)); 
      }); 
     } 

     [Test] 
     public void HomeControllerIndexViewIncludesBioParagraph() 
     { 
      appHost.Start(session => 
      { 
       var result = session.Get("/Home/Index"); 
       var expected = HttpUtility.HtmlEncode(Resources.Bio.ToLowerInvariant()); 
       Assert.IsTrue(result.ResponseText.ToLowerInvariant().Contains(expected)); 
      }); 
     } 

     [Test] 
     public void HomeControllerIndexViewIncludesServicesParagraph() 
     { 
      appHost.Start(session => 
      { 
       var result = session.Get("/Home/Index"); 
       var expected = HttpUtility.HtmlEncode(Resources.Services.ToLowerInvariant()); 
       Assert.IsTrue(result.ResponseText.ToLowerInvariant().Contains(expected)); 
      }); 
     } 

     [Test] 
     public void HomeControllerIndexViewIncludesHistoryParagraph() 
     { 
      appHost.Start(session => 
      { 
       var result = session.Get("/Home/Index"); 
       var expected = HttpUtility.HtmlEncode(Resources.History.ToLowerInvariant()); 
       Assert.IsTrue(result.ResponseText.ToLowerInvariant().Contains(expected)); 
      }); 
     } 

     private AppHost appHost; 
    } 
} 

답변

1

테스트는 항상 상황에 따라 다르며 사용자가 보는 위험은 테스트의 양을 안내해야합니다.

  • 일부 부품이 변경된 후에도 작동하지 않는다면 얼마나 중요할까요?
  • 무언가 변경되면 이러한 부분이 깨질 수 있다고 생각합니까?
  • 페이지의 구조가 변경 될 경우 이러한 테스트를 유지하는 것이 얼마나 큰 작업입니까?
  • 이러한 부분이 자주 바뀔 것으로 생각합니까? 그들을 자동화하기 위해 돈을 지불합니까?
  • 금액이 증가 할 때 테스트를 실행하는 데 걸리는 시간은 얼마나됩니까? 최신 변경 사항이 아무 것도 깨지지 않았는지 확인하기 위해 자주 그 시간을 기다릴 준비가 되셨습니까?

페이지가 자주 변경되지 않으면이 금액이 상당히 많이 보입니다. 샘플을 테스트하는 것만으로도 충분하다고 생각할 수도 있습니다. 예를 들어, 페이지에 여러 부분이 포함 된 것으로 보입니다. 동일한 위치에서오고 동일한 메커니즘에 포함되어있는 경우 다른 사람이 있으면 하나를 포함한 것이 실패 할 것 같지 않습니다.

반면에 항상 양을 줄이는 것이 더 쉽습니다. 학습 할 때이 작업부터 시작할 수 있으며 나중에 접근 방식을 변경해야하는지 확인할 수 있습니다.

1

내 테스트를 볼 때 내 반응은 주로 구현 세부 사항을 확인한다는 것입니다. 나는 당신이 행동에 집중할 것을 권한다. 최종 사용자의 사이트와의 상호 작용을 테스트합니다. 정보의 출현 여부가 아닌 정보가 존재하는지 확인하십시오.

+0

나는 이것들이 통합 테스트 였음을 지적하려고 노력했다. 전적으로 동의 : 단위 테스트에서 행동 테스트! –

관련 문제