Làm thế nào để tôi đơn vị kiểm tra một trang web mẫu? Dường như với tôi rằng rất nhiều phụ thuộc vào đầu vào của nhà nước và người dùng, điều đó sẽ không khả thi.
Nếu nó không khả thi thì có một sự thay thế tự động hợp lệ không?
Làm thế nào để tôi đơn vị kiểm tra một trang web mẫu? Dường như với tôi rằng rất nhiều phụ thuộc vào đầu vào của nhà nước và người dùng, điều đó sẽ không khả thi.
Nếu nó không khả thi thì có một sự thay thế tự động hợp lệ không?
Câu trả lời:
Vâng, bạn có thể. Bạn chỉ cần cẩn thận để phân tách mối quan tâm của bạn tốt. Nói tóm lại, bạn phải loại bỏ tất cả logic của bạn khỏi mã phía sau và đưa nó vào các lớp khác.
Có hai cách phổ biến để làm điều này.
Cách đơn giản là suy nghĩ lại về tất cả các trình xử lý sự kiện của bạn theo nghĩa "Hệ thống cung cấp cho tôi thông tin gì? Tôi cần thông tin gì để điền vào trang?" và sau đó cung cấp một lớp dịch vụ thực hiện chuyển đổi đó.
Trong trường hợp này, lớp dịch vụ nên biết rất ít về bản chất của lớp trình bày của bạn. Bạn vẫn phải lấy dữ liệu được trả về từ dịch vụ và điền các thành phần chính xác của WebForm vào mã phía sau của bạn và điều này vẫn chưa được kiểm tra (ít nhất là bằng các bài kiểm tra đơn vị, bạn vẫn có thể sử dụng các bài kiểm tra tích hợp). Nhưng điều này hiếm khi xảy ra khi mã bị lỗi, nó có nhiều khả năng thất bại trong logic.
Một cách phức tạp hơn, nhưng hiệu quả hơn, là sử dụng mẫu Trình xem mô hình . Khi chúng tôi thử điều đó, chúng tôi thấy rằng Người thuyết trình nhanh chóng trở nên rất hợp với khuôn khổ và, chúng tôi càng phát triển MVP, thì rõ ràng MVP thực sự muốn trở thành MVC nhưng không thể.
Điều đó nói rằng, những người khác đã thực hiện điều này rất thành công - thậm chí còn có một khung webformsmvp có sẵn để loại bỏ việc nâng vật nặng - vì vậy số dặm của bạn có thể thay đổi.
Rõ ràng, toàn bộ trang biểu mẫu web không phải là một đơn vị và do đó không thể được kiểm tra đơn vị. Tuy nhiên, có một số điều bạn có thể làm cho các bài kiểm tra tự động:
Tôi xin lỗi vì đã bỏ lỡ phần "đơn vị" của câu hỏi ...
SeleniumHQ là bạn của bạn để kiểm tra từ mặt trước. Nó không phải là một bài kiểm tra đơn vị, giống như một bài kiểm tra hộp đen. Bạn vẫn cần nghĩ về các trường hợp kiểm tra hợp lệ ...
Phát biểu từ kinh nghiệm: Chỉ khi nó được thực hiện đúng. Theo "đúng", ý tôi là mã phía sau tối thiểu và một cái gì đó giống như Model-View-Presenter đã đề cập ở trên để làm cho Mẫu Web "câm". Điều này thường tỏ ra rất khó khăn với các ứng dụng brownfield vì chúng không được thiết kế với ý tưởng này và đó là một nỗ lực gần như của Herculean để tái cấu trúc / viết lại các trang để sử dụng nó.
Tôi thấy các bài kiểm tra web đơn vị cực kỳ hữu ích, ngay cả khi đó chỉ là để đưa ra ý tưởng chung về lỗi hồi quy hoặc cho các dự án mới.
Theo như trạng thái có liên quan, bạn tạo các bài kiểm tra đơn vị của mình như với các bài kiểm tra không phải UI - họ xóa cơ sở dữ liệu khi bắt đầu kiểm tra và xây dựng lại cơ sở dữ liệu để không chứa gì ngoại trừ trạng thái bắt đầu. Mỗi bài kiểm tra đơn vị sau đó gói gọn một trang hoặc thường là một tác vụ riêng biệt trên một trang.
http://watin.org/ là một công cụ kiểm tra web khác nhưng dành cho C # /. NET. Bạn viết các bài kiểm tra dưới dạng bài kiểm tra đơn vị:
[Test]
public void SearchForWatiNOnGoogle()
{
using (var browser = new IE("http://www.google.com"))
{
browser.TextField(Find.ByName("q")).TypeText("WatiN");
browser.Button(Find.ByName("btnG")).Click();
Assert.IsTrue(browser.ContainsText("WatiN"));
}
}
Hiện tại nó dựa trên IE nhưng có một số hỗ trợ thử nghiệm cho Firefox và Chrome. Bạn có thể tự động hóa khá nhiều bất cứ điều gì bạn sẽ làm trong các bài kiểm tra thủ công, bao gồm cả tương tác Javascript.
Bạn thực sự không thể kiểm tra một trang web, đơn giản vì các yêu cầu web xảy ra trên một dây (hoặc thông qua ngăn xếp TCP). Do đó, các bài kiểm tra không phù hợp với định nghĩa của "bài kiểm tra đơn vị", rất có thể, chúng sẽ là các bài kiểm tra đầu cuối.
Đối với các loại thử nghiệm đó, bạn có thể sử dụng một bộ như Selenium chạy trình duyệt web phía sau hậu trường. Một lời cảnh báo mặc dù: thông thường loại thử nghiệm này là rất khó khăn và không thể đoán trước, vì có nhiều phần di chuyển!
Thú vị hơn nữa, nó làm tôi lo lắng một chút tại sao bạn lại cần phải kiểm tra các mẫu web. Không phải bạn đã đặt quá nhiều logic vào mã phía sau và có logic kinh doanh thiếu máu nào không?
Trong 5 năm qua, Jasmine đã nổi lên như một công cụ chính cho các bài kiểm tra đơn vị mặt trước. Nó thường được tích hợp vào thử nghiệm xây dựng tự động với Node và npm
Mỗi https://en.wikipedia.org/wiki/Jasmine_(JavaScript_testing_framework) :
Jasmine là một khung kiểm tra mã nguồn mở cho JavaScript. [2] Nó nhằm mục đích chạy trên bất kỳ nền tảng hỗ trợ JavaScript nào, không xâm nhập vào ứng dụng cũng như IDE và để có cú pháp dễ đọc. Nó bị ảnh hưởng nặng nề bởi các khung thử nghiệm đơn vị khác, chẳng hạn như VítUnit, JSSpec, JSpec và RSpec. [3]
Mặc dù tất cả các đề cập về javascript, nó cũng có thể được sử dụng để kiểm tra đơn vị của một hình thức web đơn giản.
Khi phát triển một trang web ASP.NET, chúng tôi có thể chạy thử nghiệm đơn vị trên:
Có thể TDD tất cả điều này, tùy thuộc vào kiến trúc của bạn. Điều duy nhất bạn không thể kiểm tra đơn vị là cách bố trí tệp đánh dấu.