2008-12-10 39 views
14

Có ai đã thử bất kỳ trình tạo thử nghiệm đơn vị nào cho .Net không?Máy phát hiện trường hợp thử nghiệm đơn vị

Tôi giả định mặc dù nó sẽ không thay thế cho bất kỳ bài kiểm tra đơn vị tốt nào được viết bởi một người viết chức năng này, nhưng tôi nghĩ nó sẽ lấy đi một số công việc và là điểm khởi đầu mà chúng tôi có thể làm tốt hơn kiểm tra đơn vị.

Cảm ơn.

+0

+1 Câu hỏi tổng thể thú vị. Tôi quan tâm để sử dụng một máy phát điện thử nghiệm một lần trong một thời gian cho các dự án nhỏ, và bạn câu hỏi có liên quan đến những gì tôi đã chỉ tự hỏi. –

Trả lời

22

Tạo thử nghiệm đơn vị là cách sai để thực hiện kiểm tra đơn vị. Cách thích hợp để thực hiện kiểm tra đơn vị là tạo các trường hợp thử nghiệm trước khi bạn viết mã chức năng, sau đó phát triển mã của bạn cho đến khi các kiểm tra xác nhận, điều này được biết là TDD (Test Driven Development).

Một trong những lý do chính tạo thử nghiệm đơn vị là một ý tưởng tồi vì nếu có bất kỳ lỗi nào trong mã hiện tại của bạn, các thử nghiệm sẽ được tạo ra đối với các lỗi đó, do đó nếu bạn khắc phục chúng trong tương lai, các kiểm tra xấu sẽ thất bại và bạn sẽ giả định một cái gì đó bị hỏng, khi nó thực sự được cố định.

Nhưng kể từ khi mã được viết, bây giờ nó là nước dưới cầu. Và các bài kiểm tra đơn vị lỗi có thể tốt hơn là không có bài kiểm tra đơn vị nào cả. Tôi đã luôn luôn ưa thích NUnit và có một máy phát điện thử nghiệm tương thích NUnit here (rất phải chăng).

+10

Vâng đó là cách sai để làm TDD, nhưng nếu bạn đang làm việc với mã Legacy đó là một nền tảng tốt không? – Webjedi

+0

@Webjedi. Tôi không nghĩ vậy. Viết các bài kiểm tra bằng tay sẽ giúp bạn hiểu mã được cho là đang làm gì. Chạy trình tạo thử nghiệm - với mã có thể đọc được mà nó sẽ tạo ra - không hỗ trợ điều đó. – tvanfosson

+0

Chính xác. Làm thế nào một công cụ có thể biết hành vi của ứng dụng của bạn được cho là gì? Nếu bạn không có bài kiểm tra, bạn nên viết các bài kiểm tra chức năng cho giao diện người dùng bằng WatiN hoặc Selenium, v.v. – bryanbcook

10

Bạn đã xem xét Pex? Đó là từ Microsoft Research.

Pex tự động tạo ra một bộ thử nghiệm nhỏ với mã số bảo hiểm cao cho một chương trình .NET. Để kết thúc này, Pex thực hiện phân tích chương trình có hệ thống (sử dụng phép thực thi biểu tượng động, tương tự như kiểm tra mô hình ) để xác định kiểm tra đầu vào cho thử nghiệm đơn vị tham số. Pex tìm hiểu hành vi của chương trình bằng cách theo dõi các dấu vết thực hiện. Pex sử dụng một bộ giải quyết hạn chế để tạo ra các đầu vào thử nghiệm mới thực hiện hành vi chương trình khác nhau .

+0

Pex đáng xem. Tôi đã tìm thấy nó hữu ích cho danh sách ngày càng tăng của các phương pháp mở rộng chúng tôi viết, mà cho đến nay đã đi chưa được kiểm tra. –

5

Năm trước, tôi đã sửa đổi Haskell's QuickCheck để cho phép purely functional Test Driven Development có thử nghiệm sinh sản. Giải pháp của tôi là lưu hạt giống PRNG để tạo ra một trường hợp thử nghiệm không thành công và chạy thử nghiệm trong tương lai với cùng một hạt giống đó.

Gần đây tôi đã có một công việc NET, và Google phát hiện ra rằng MbUnit didhave hỗ trợ cho các xét nghiệm sinh sản vào năm 2004. Tôi cũng thấy gần đây hơn Gallio, nhưng tôi có một số loại cố khi sử dụng nó, tôi không nhớ chính xác gì.

Vì vậy, TDD và thử nghiệm sinh sản không loại trừ lẫn nhau, Gallio là tùy chọn .NET gần đây nhất tôi đã thấy và tôi không nhớ tại sao tôi không sử dụng nó ngay bây giờ.

0

Tôi tạo ra ErrorUnit một đơn vị phát điện thử nghiệm cho.Net

Sử dụng máy phát điện để phát triển TDD chắc chắn là thực tế; ví dụ trong mã hóa những gì xảy ra trên một nút bấm, một cách để sử dụng ErrorUnit theo cách TDD sẽ là:

1) Trước tiên hãy tạo thử nghiệm thủ công để đảm bảo có sự kiện bấm nút; sau đó tạo sự kiện và kiểm tra theo TDD thuần túy.

2) Sau đó chạy chương trình, điều hướng đến màn hình với các nút, và với một breakpoint thiết lập trong Phương thức sự kiện, nhấn nút

3) Khi các breakpoint là hit sau đó bạn có thể nhấp ErrorUnit của "Add kiểm tra đơn vị "để tạo ra một thử nghiệm đơn vị với tất cả các đối tượng và trạng thái cơ sở dữ liệu hiện tại đã được chế giễu. (Lặp lại khi cần với các trường hợp sử dụng khác nhau)

4) Sau đó, bạn sẽ thay đổi các bài kiểm tra đơn vị đã tạo để có Assert khớp với kết quả của những gì bạn muốn nhấn nút để thực hiện theo TDD.

5) Sau đó viết mã đằng sau sự kiện nhấp và chạy thử nghiệm của bạn được tạo ra bởi ErrorUnit (cho Sắp xếp và Đạo luật) và một phần tùy chỉnh (cho Xác nhận).

Bằng cách này, bạn tiết kiệm phần lớn thời gian của bạn sẽ được dùng để nhập Sắp xếp và Đạo luật.

ErrorUnit cũng hoạt động với Ghi nhật ký lỗi để tạo lại lỗi trong môi trường khác bằng cách tuần tự hóa và mô phỏng trong đơn vị kiểm tra trạng thái chính xác tại thời điểm xảy ra lỗi; Đưa TDD đến độ phân giải vấn đề sản xuất.

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