2012-04-17 38 views
7

Xin chào, tôi đang hợp tác với trang web của mình và trong khi nó rất đơn giản, tôi quyết định thử nghiệm nhiều khía cạnh của nó nhất có thể. Sử dụng đặc điểm của việc chỉ viết các bài kiểm tra hữu ích có thể giải thích cho các tình huống tôi có thể tưởng tượng xảy ra (đổi tên tập lệnh hoặc tệp css, v.v.)Quá nhiều thử nghiệm trên chế độ xem đơn giản?

Tôi đang sử dụng khung kiểm tra Tích hợp MVC của Steve Sanderson và các bài kiểm tra của tôi dưới đây.

Câu hỏi của tôi gấp hai lần, đây là mức độ thử nghiệm "quá nhiều" và nếu không, các tình huống khác (hoặc nhà phát triển có liên quan như đổi tên hoặc bất kỳ điều gì khác) bạn có thể nghĩ đến.

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; 
    } 
} 

Trả lời

1

Thử nghiệm luôn phụ thuộc vào ngữ cảnh và rủi ro mà bạn thấy sẽ hướng dẫn lượng thử nghiệm.

  • Làm thế nào quan trọng nếu một số phần không hoạt động sau một số thay đổi?
  • Bạn có tin rằng những phần này có thể bị hỏng khi có sự thay đổi không?
  • Nhiệm vụ lớn như thế nào để duy trì các thử nghiệm này nếu cấu trúc của trang sẽ thay đổi?
  • Bạn có tin rằng những phần này sẽ thay đổi thường xuyên không? Nó trả tiền để tự động hóa chúng?
  • Mất bao lâu để chạy thử nghiệm khi số tiền tăng lên? Bạn đã sẵn sàng để chờ đợi thời gian đó thường xuyên để thấy rằng những thay đổi mới nhất đã không bị hỏng bất cứ điều gì?

Nếu trang không thay đổi thường xuyên, số tiền này có vẻ như khá nhiều. Bạn cũng có thể nghĩ nếu nó đủ để thử nghiệm một mẫu vật. Ví dụ: có vẻ như bạn đang bao gồm nhiều phần vào trang. Nếu họ đến từ cùng một vị trí và được bao gồm trong cùng một cơ chế, có vẻ như không chắc rằng bao gồm cả một sẽ thất bại nếu những người khác đang có.

Mặt khác, việc giảm số tiền luôn dễ dàng hơn. Bạn có thể bắt đầu với điều này khi học và sau đó xem liệu bạn có cần phải thay đổi cách tiếp cận sau này không.

1

Phản ứng của tôi khi tôi thấy các thử nghiệm của bạn là họ chủ yếu xác minh chi tiết triển khai. Tôi khuyên bạn nên tập trung vào hành vi. Kiểm tra tương tác của người dùng cuối với trang web. Xác minh rằng thông tin có mặt, không phải là thông tin được trình bày.

+0

Tôi đã cố gắng chỉ ra đây là các bài kiểm tra tích hợp. Đồng ý hết lòng: kiểm tra hành vi trong các bài kiểm tra đơn vị! –

Các vấn đề liên quan