2009-01-30 38 views
14

Tôi biết Visual Studio cung cấp một số tính năng Thử nghiệm Đơn vị. Làm cách nào để sử dụng chúng, bạn sử dụng chúng như thế nào? Tôi nên biết gì về thử nghiệm đơn vị (giả sử tôi không biết gì).Bắt đầu với Thử nghiệm Đơn vị trong C# với Visual Studio

This question tương tự nhưng không giải quyết được Visual Studio có thể làm gì, vui lòng không đánh dấu trang này là trùng lặp vì lý do đó. Posted as Community Wiki vì tôi không cố gắng trở thành một con điếm đại diện.

Trả lời

2

Cấu trúc thử nghiệm đơn vị trong VS tương tự như NUnit khi sử dụng. Một tính năng thú vị (và hữu dụng) của nó khác với NUnit một cách đáng kể. Thử nghiệm đơn vị VS có thể được sử dụng với mã không được viết với thử nghiệm đơn vị trong tâm trí.

Bạn có thể xây dựng khung kiểm tra đơn vị sau khi ứng dụng được viết vì cấu trúc thử nghiệm cho phép bạn tham khảo bên ngoài cuộc gọi phương thức và sử dụng mã dốc lên và xé xuống để chuẩn bị cho thử nghiệm. Ví dụ: Nếu bạn có một phương thức trong một lớp sử dụng tài nguyên bên ngoài phương thức, bạn có thể tạo chúng trong lớp ramp-up (mà VS tạo cho bạn) và sau đó kiểm tra nó trong lớp kiểm thử đơn vị (cũng được tạo ra cho bạn bởi VS). Khi bài kiểm tra kết thúc, lớp tear-down (một lần nữa ... được cung cấp cho bạn bởi VS) sẽ giải phóng tài nguyên và dọn dẹp. Toàn bộ quá trình này tồn tại bên ngoài ứng dụng của bạn do đó không can thiệp vào cơ sở mã.

Khung kiểm tra đơn vị VS thực sự được triển khai rất tốt và dễ sử dụng. Hay nhất của tất cả, bạn có thể sử dụng nó với một ứng dụng không được thiết kế với thử nghiệm đơn vị trong tâm trí (một cái gì đó không phải là dễ dàng với NUnit).

+0

cẩn thận để liên kết/giải thích NUnit? – Malfist

+0

Tại sao điều đó không dễ dàng trong NUnit? NUnit cung cấp khả năng tương tự để làm thiết lập thử nghiệm/teardown. Bạn có thể sử dụng NUnit để kiểm tra đơn vị mã mà không được viết với thử nghiệm đơn vị trong tâm trí là tốt. –

+0

Có lẽ tôi đã hiểu lầm cách NUnit hoạt động, nhưng tôi nghĩ rằng bạn phải đặt các câu lệnh khai báo với mã bạn đang kiểm tra để NUnit biết nơi để tìm các đối tượng thử nghiệm. Với khung kiểm tra được xây dựng thành VS, điều này là không cần thiết. Mặc dù tôi có thể sai về NUnit. :) – Eric

2

Điều đầu tiên tôi sẽ làm là tải xuống bản sao của TestDriven.Net để sử dụng làm người thử nghiệm. Thao tác này sẽ thêm một menu chuột phải, cho phép bạn chạy các kiểm tra riêng lẻ bằng cách nhấn chuột phải vào phương thức thử và chọn Run Test (s). Điều này cũng làm việc cho tất cả các bài kiểm tra trong một lớp (nhấn chuột phải vào lớp, nhưng bên ngoài một phương thức), một vùng tên (nhấn chuột phải vào dự án hoặc trong không gian tên bên ngoài lớp), hoặc toàn bộ giải pháp (nhấn chuột phải vào giải pháp). Nó cũng cho biết thêm khả năng chạy thử nghiệm với vùng phủ sóng (tích hợp sẵn hoặc nCover) hoặc trình gỡ lỗi từ trình đơn nhấp chuột phải.

Theo như thiết lập kiểm tra, thường tôi gắn bó với một dự án thử nghiệm cho mỗi dự án và một lớp kiểm tra cho mỗi lớp được kiểm tra. Đôi khi tôi sẽ tạo các lớp thử nghiệm cho các khía cạnh chạy trên nhiều lớp, nhưng không thường xuyên. Cách điển hình tôi tạo ra là đầu tiên tạo ra bộ khung của lớp - không có thuộc tính, không có hàm tạo, nhưng với phương thức đầu tiên mà tôi muốn thử nghiệm. Phương thức này chỉ đơn giản là ném một NotImplementedException.

Khi bộ xương của lớp được tạo, tôi sử dụng nhấp chuột phải vào Tạo thử nghiệm đơn vị trong phương pháp đang thử nghiệm. Việc này sẽ đưa ra một hộp thoại cho phép bạn tạo một dự án thử nghiệm mới hoặc chọn một dự án hiện có. Tôi tạo và đặt tên phù hợp, một dự án thử nghiệm mới và có trình hướng dẫn tạo các lớp. Một khi điều này được thực hiện, bạn có thể cũng muốn tạo các hàm truy cập riêng cho lớp trong dự án thử nghiệm. Đôi khi những điều này cần được cập nhật (tái tạo) nếu lớp của bạn thay đổi đáng kể.

Bây giờ bạn có dự án thử nghiệm và thử nghiệm đầu tiên của mình. Bắt đầu bằng cách sửa đổi kiểm tra để xác định hành vi mong muốn của phương thức. Viết đủ mã để (chỉ vừa đủ) vượt qua bài kiểm tra. tiếp tục với việc viết các bài kiểm tra/viết mã, chỉ định hành vi khác cho phương thức cho đến khi tất cả hành vi của phương thức được xác định. Sau đó chuyển sang phương thức hoặc lớp tiếp theo nếu thích hợp cho đến khi bạn có đủ mã để hoàn thành tính năng mà bạn đang làm việc.

Bạn có thể thêm nhiều loại kiểm tra khác nhau theo yêu cầu. Bạn cũng có thể thiết lập kiểm soát mã nguồn của mình để yêu cầu một số hoặc tất cả các kiểm tra vượt qua trước khi đăng ký.

+0

Tại sao lại sử dụng TestDriven.Net? Điều đó không trả lời được câu hỏi nào cả (đó là về việc sử dụng các công cụ kiểm thử tích hợp sẵn). –

+0

Bạn vẫn đang sử dụng khung kiểm thử của Microsoft, nhưng chỉ sử dụng nhân tố thử nghiệm từ TestDriven.Net. Tôi thích nó vì nó là thuận tiện hơn để chạy các bài kiểm tra trực tiếp từ mã. – tvanfosson

5

Dễ dàng sự khác biệt đáng kể nhất là hỗ trợ MSTest được xây dựng trong Visual Studio và cung cấp kiểm tra đơn vị, bảo hiểm mã và hỗ trợ chế nhạo trực tiếp. Để thực hiện cùng một loại thứ trong các khung kiểm thử đơn vị bên ngoài (bên thứ ba) thường yêu cầu nhiều khung công tác (một khung kiểm thử đơn vị và một khung mocking) và các công cụ khác để phân tích phạm vi mã. Cách đơn giản để sử dụng các công cụ kiểm thử đơn vị MSTest là mở tệp bạn muốn tạo các kiểm tra đơn vị, nhấp chuột phải trong cửa sổ trình soạn thảo và chọn menu "Tạo đơn vị kiểm tra ..." từ trình đơn ngữ cảnh. Tôi thích đưa các bài kiểm tra đơn vị của mình vào một dự án riêng biệt, nhưng đó chỉ là sự quan tâm cá nhân. Việc này sẽ tạo ra một loại thử nghiệm "mẫu", lớp này sẽ chứa các phương thức thử nghiệm để cho phép bạn kiểm tra từng chức năng và thuộc tính của lớp của bạn. Tại thời điểm đó, bạn cần phải xác định ý nghĩa của thử nghiệm để vượt qua hoặc thất bại (nói cách khác, xác định điều gì sẽ xảy ra với một bộ đầu vào nhất định).

Nói chung, bạn kết thúc bài kiểm tra viết mà trông tương tự như sau:

string stringVal = "This"; 
Assert.IsTrue(stringVal.Length == 4); 

này nói rằng cho varaible tên stringVal, tài sản Chiều dài nên bằng 4 sau khi chuyển nhượng.

Các tài nguyên được liệt kê trong chủ đề khác nên cung cấp một điểm khởi đầu tốt để hiểu được thử nghiệm đơn vị nói chung là gì.

+0

Tôi biết (nghĩ) MS đã mua TypeMock, nhưng tôi hiểu rằng đó vẫn là một tiện ích bổ sung. Tôi đã có phiên bản Team Suite và không có khung dựng sẵn được xây dựng sẵn. Tôi sử dụng RhinoMocks để chế nhạo. – tvanfosson

+0

@tvanfosson có lẽ nó không phải là thực sự chế giễu sau đó. tôi đã đề cập đến khả năng tạo các đối tượng "truy cập riêng" để cho phép bạn kiểm tra các phương thức riêng và nội bộ. –

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