2009-07-16 25 views
16

Tôi thừa nhận rằng tôi hầu như không có kinh nghiệm hủy bỏ. Tôi đã thử với DUnit một thời gian trước đây nhưng đã bỏ cuộc vì có quá nhiều sự phụ thuộc giữa các lớp trong ứng dụng của tôi. Nó là một ứng dụng Delphi khá lớn (khoảng 1,5 triệu dòng nguồn) và chúng tôi là một nhóm duy trì nó.Làm cách nào để bắt đầu mã cũ và mới thử nghiệm đơn vị?

Thử nghiệm hiện được thực hiện bởi một người sử dụng nó trước khi phát hành và báo cáo lỗi. Tôi cũng đã thiết lập một số GUI-test trong TestComplete 6, nhưng nó thường thất bại vì những thay đổi trong ứng dụng.

In đậm cho Delphi được sử dụng làm khung bảo mật đối với cơ sở dữ liệu. Tất cả chúng ta đều đồng ý rằng unittesting là con đường để đi và chúng tôi dự định viết một ứng dụng mới trong DotNet với ECO là khung công tác kiên trì.

Tôi chỉ không biết bắt đầu từ đâu bằng cách hủy bỏ ... Bất kỳ sách hay, URL nào, thực hành tốt nhất, v.v ...?

Trả lời

12

Vâng, thử thách trong thử nghiệm đơn vị không phải là thử nghiệm, nhưng trong viết mã có thể kiểm tra. Nếu mã được viết không phải suy nghĩ về thử nghiệm, thì có thể bạn sẽ có một thời gian thực sự khó khăn.

Dù sao, nếu bạn có thể cấu trúc lại, hãy thực hiện công cụ tái cấu trúc để làm cho nó có thể kiểm chứng. Không pha trộn tạo đối tượng với logic bất cứ khi nào có thể (Tôi không biết delphi, nhưng có thể có một số khuôn khổ phụ thuộc tiêm để giúp đỡ trong việc này).

This blog có rất nhiều thông tin chi tiết về thử nghiệm.Kiểm tra this article ví dụ (gợi ý đầu tiên của tôi dựa trên nó).

Đối với đề xuất, hãy thử kiểm tra các nút lá của mã của bạn trước tiên, các lớp đó không phụ thuộc vào người khác. Họ nên được dễ dàng hơn để kiểm tra, vì họ không yêu cầu mocks.

+0

Tôi hoàn toàn đồng ý, cảm ơn nhận xét của bạn. Ứng dụng Delphi cũ của chúng tôi (nó bắt đầu vào khoảng năm 1999) đã không được viết với thử nghiệm trong tâm trí. Có lẽ nó sẽ không bao giờ được thử nghiệm đơn vị tốt cho nó vì nó đòi hỏi rất nhiều thời gian để viết. Nhưng khi chúng tôi bắt đầu với ứng dụng C# mới, chúng tôi không muốn mắc lỗi tương tự nữa. –

3

Một trong những cách tiếp cận phổ biến hơn là viết các bài kiểm tra đơn vị khi bạn sửa đổi mã. Tất cả các mã mới đều được kiểm tra đơn vị và cho bất kỳ mã nào bạn sửa đổi trước tiên bạn viết kiểm tra, xác minh, sửa đổi, xác minh lại và sau đó viết/sửa bất kỳ thử nghiệm nào bạn cần do sửa đổi của bạn.

Một trong những lợi thế lớn của việc có phạm vi kiểm tra đơn vị tốt là có thể xác minh rằng những thay đổi bạn thực hiện không vô tình phá vỡ điều gì đó khác. Cách tiếp cận này cho phép bạn làm điều đó, trong khi tập trung nỗ lực vào nhu cầu trước mắt của bạn.

Phương pháp thay thế tôi đã là tập trung vào phát triển các bài kiểm tra đơn vị của tôi qua Co-Ops :) kiểm tra đơn vị

+0

Có điều này là Chén thánh, để thực hiện thay đổi lớn hơn mà không sợ bất cứ điều gì để phá vỡ khi có vẻ ok. –

7

Viết cho mã di sản thường đòi hỏi rất nhiều refactoring. Cuốn sách tuyệt vời bao gồm điều này là "Hiệu quả hoạt động với Mã kế thừa"

Một đề xuất bổ sung: sử dụng công cụ kiểm tra đơn vị để chỉ ra tiến độ của bạn trong tác phẩm này. Tôi không chắc chắn về những gì các công cụ bảo hiểm tốt cho mã Delphi là mặc dù. Tôi đoán đây sẽ là một câu hỏi/chủ đề khác.

Working Effectively with Legacy Code

+3

Sách lông vũ nằm trên kệ sách của tôi, trong tầm tay. Một cảnh báo về nó: Lông vũ là rất nghiêm ngặt về những gì ông xem xét một bài kiểm tra đơn vị phong nha và có thể dọa đi những người mới bắt đầu bài kiểm tra đơn vị. Đừng để điều đó làm bạn sợ! Ngoài ra, một cuốn sách tuyệt vời! – azheglov

+1

Tôi đồng ý đây là một cuốn sách tuyệt vời, tuy nhiên nó hơi bị đọc. Tôi đã chèn các bài kiểm tra vào một ứng dụng mà tôi đang làm, hiện tại mỗi bài kiểm tra bao gồm một đoạn mã lớn, nhưng khi tôi phải sửa đổi mã, tôi đã tái cấu trúc nó để làm cho nó dễ kiểm tra hơn chi tiết. Nếu bạn không biết nhiều về việc tái cấu trúc, bạn cũng nên có một hoặc hai cuốn sách về điều này. Có lẽ việc tái cấu trúc cổ điển của Martin Fowler. – Alister

1

Đối với Net unittesting đọc: "The Art of Đơn vị kiểm tra: bằng các ví dụ trong .NET"

Về pratices tốt nhất:
gì bạn nói là đúng: Đôi khi, đó là khó khăn để viết bài kiểm tra đơn vị vì sự phụ thuộc giữa các lớp học ... Vì vậy, viết các bài kiểm tra đơn vị ngay sau hoặc ngay trước ;-) việc thực hiện các lớp. Như thế này, nếu bạn có một số khó khăn để viết các bài kiểm tra, có thể nó có nghĩa là bạn có một vấn đề thiết kế!

+0

Có, rất khó để viết các bài kiểm tra đơn vị cho mã kế thừa. Nhưng nó có thể với bạn refactor mã của bạn. Có rất nhiều cuốn sách bao gồm điều này và một cuốn sách tuyệt vời là "Tác dụng hiệu quả với Mã số di sản" của Michael Feather. –

2

Khi bạn làm việc với mã cũ, giả lập objetcs thực sự hữu ích để xây dựng các bài kiểm tra đơn vị.

Hãy nhìn vào câu hỏi này liên quan đến Delphi và chế giễu: What is your favorite Delphi mocking library?

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