Tôi nghe ai đó nói rằng các bài kiểm tra đơn vị (ví dụ: nUnit, jUnit, xUnit) phải là
(Ví dụ: kiểm tra đơn vị phải chứa "mã ẩm" chứ không phải "mã khô")
Bọn họ đang nói gì thế?
Tôi nghe ai đó nói rằng các bài kiểm tra đơn vị (ví dụ: nUnit, jUnit, xUnit) phải là
(Ví dụ: kiểm tra đơn vị phải chứa "mã ẩm" chứ không phải "mã khô")
Bọn họ đang nói gì thế?
Câu trả lời:
DAMP và DRY không mâu thuẫn với nhau, thay vào đó chúng cân bằng hai khía cạnh khác nhau về khả năng duy trì của mã . Mã duy trì (mã dễ thay đổi) là mục tiêu cuối cùng ở đây.
Để duy trì mã, trước tiên bạn cần hiểu mã. Để hiểu nó, bạn phải đọc nó. Hãy xem xét một lúc bạn dành bao nhiêu thời gian để đọc mã. Đó là rất nhiều. DAMP tăng khả năng bảo trì bằng cách giảm thời gian cần thiết để đọc và hiểu mã.
Loại bỏ trùng lặp đảm bảo rằng mọi khái niệm trong hệ thống có một biểu diễn có thẩm quyền duy nhất trong mã. Một thay đổi đối với một khái niệm kinh doanh duy nhất dẫn đến một thay đổi đối với mã. DRY tăng khả năng bảo trì bằng cách cách ly thay đổi (rủi ro) chỉ với những phần của hệ thống phải thay đổi.
Các thử nghiệm thường chứa sự trùng lặp vốn có bởi vì chúng đang thử nghiệm cùng một thứ lặp đi lặp lại, chỉ với các giá trị đầu vào hoặc mã thiết lập hơi khác nhau. Tuy nhiên, không giống như mã sản xuất, sự trùng lặp này thường chỉ được tách biệt với các kịch bản trong một tập tin / tập tin thử nghiệm duy nhất. Bởi vì điều này, sự trùng lặp là tối thiểu và rõ ràng, điều đó có nghĩa là nó gây ra ít rủi ro cho dự án hơn các loại trùng lặp khác.
Hơn nữa, loại bỏ loại trùng lặp này làm giảm khả năng đọc của các bài kiểm tra. Các chi tiết được sao chép trước đây trong mỗi thử nghiệm hiện được ẩn đi trong một số phương thức hoặc lớp mới. Để có được bức tranh đầy đủ của bài kiểm tra, bây giờ bạn phải tinh thần đặt tất cả các phần này lại với nhau.
Do đó, vì sao chép mã kiểm tra thường mang ít rủi ro hơn và thúc đẩy khả năng đọc, dễ dàng thấy cách nó được coi là chấp nhận được.
Theo nguyên tắc, ưu tiên DRY trong mã sản xuất, ưu tiên DAMP trong mã kiểm tra. Trong khi cả hai đều quan trọng như nhau, với một chút khôn ngoan, bạn có thể nghiêng về sự cân bằng có lợi cho bạn.
DAMP - Các cụm từ mô tả và có ý nghĩa.
Giá trị "DAMP not DRY" dễ đọc hơn khi sử dụng lại mã. Ý tưởng của DAMP không DRY trong các trường hợp thử nghiệm là các thử nghiệm phải dễ hiểu, ngay cả khi điều đó có nghĩa là các trường hợp thử nghiệm đôi khi có mã lặp lại.
Xem thêm Mã trùng lặp có dễ chấp nhận hơn trong các bài kiểm tra đơn vị không? cho một số thảo luận về giá trị của quan điểm này.
Nó có thể đã được đặt ra bởi Jay Field , liên quan đến Ngôn ngữ cụ thể miền.
"DRY" là "Đừng lặp lại chính mình"
Đây là một thuật ngữ được sử dụng để bảo mọi người viết mã có thể sử dụng lại, để cuối cùng bạn không viết mã tương tự lặp đi lặp lại.
"DAMP" là "Cụm từ mô tả và có ý nghĩa".
Thuật ngữ này nhằm bảo bạn viết mã có thể dễ dàng hiểu được bởi một người đang xem nó. Nếu bạn đang tuân theo nguyên tắc này, bạn sẽ có các tên hàm và biến dài và mô tả, v.v.
Damp = 'Cụm từ mô tả và có ý nghĩa' - bài kiểm tra đơn vị của bạn sẽ có thể được 'đọc':
Từ bài viết:
DAMP là viết tắt của cụm từ mô tả và ý nghĩa, và trái ngược với DRY, không phải theo nghĩa mà nó nói là mọi thứ giống như một đống rác và không thể đọc được, vì điều đó dễ đọc hơn là tránh được mã thừa.
Điều này có nghĩa là gì và sử dụng nó ở đâu?
DAMP chủ yếu áp dụng khi viết mã kiểm tra. Mã kiểm tra phải rất dễ hiểu đến mức có thể chấp nhận được một số dự phòng.
DAMP là viết tắt của cụm từ mô tả và ý nghĩa, và trái ngược với DRY, không phải theo nghĩa mà nó nói là mọi thứ giống như một đống rác và không thể đọc được, vì điều đó dễ đọc hơn là tránh được mã thừa.
Đã có một vài câu trả lời ở đây, nhưng tôi muốn thêm một câu khác vì tôi không nghĩ họ nhất thiết phải giải thích nó tốt nhất có thể.
Ý tưởng về DRY (Đừng lặp lại chính mình) là trong mã ứng dụng của bạn, bạn muốn tránh mã thừa hoặc lặp lại. Nếu bạn đã có một cái gì đó mà mã của bạn cần thực hiện nhiều lần, bạn nên có một hàm hoặc lớp cho nó, thay vì lặp lại mã tương tự ở một vài nơi.
Đây là một khái niệm lập trình khá nổi tiếng.
DAMP (Cụm từ mô tả và có ý nghĩa) dành cho các bài kiểm tra đơn vị của bạn. Ý tưởng ở đây là các tên phương thức kiểm tra đơn vị của bạn phải dài và mô tả - các câu ngắn có hiệu quả mô tả những gì bạn đang kiểm tra.
ví dụ: testWhenIAddOneAndOneIShouldGetTwo() { .... }
Khi bạn đọc một tên phương thức DAMP như thế này, bạn sẽ hiểu chính xác những gì người viết bài kiểm tra đang cố gắng đạt được, thậm chí không cần phải đọc mã kiểm tra (mặc dù mã kiểm tra cũng có thể tuân theo khái niệm này, tất nhiên cũng có tên biến từ, Vân vân).
Điều này là có thể bởi vì một phương pháp thử nghiệm đơn vị có đầu vào rất cụ thể và đầu ra dự kiến, vì vậy nguyên tắc DAMP hoạt động tốt cho chúng. Các phương thức trong mã ứng dụng chính của bạn dường như không đủ cụ thể để đảm bảo các tên như thế này, đặc biệt nếu bạn đã viết nó với nguyên tắc DRY trong tâm trí.
DAMP và DRY không mâu thuẫn với nhau - chúng bao gồm các khía cạnh khác nhau về cách viết mã của bạn - nhưng dù sao chúng thường không được sử dụng cùng nhau bởi vì các phương pháp được viết theo nguyên tắc DRY sẽ có mục đích chung và không phù hợp để tên phương pháp cụ thể cao. Do đó, nói chung, như đã giải thích ở trên, mã ứng dụng của bạn phải là DRY và mã thử nghiệm đơn vị DAMP của bạn.
Tôi hy vọng điều đó sẽ giúp giải thích nó tốt hơn một chút.
Tôi đồng ý với Chris Edwards ở chỗ bạn cần đạt được sự cân bằng giữa hai người. Một điều cần lưu ý là nếu trong nỗ lực loại bỏ trùng lặp, cuối cùng bạn sẽ thêm rất nhiều cấu trúc bổ sung vào mã kiểm tra đơn vị của mình (tức là khi đưa DRY đến cực trị), bạn có nguy cơ đưa ra các lỗi trong đó. Trong tình huống như vậy, bạn sẽ phải kiểm tra đơn vị kiểm tra đơn vị của mình hoặc để lại các bit cấu trúc chưa được kiểm tra.
Tôi không muốn nhân đôi nỗ lực ở đây, nhưng bạn có thể có các bài kiểm tra là DAMP nhưng có lợi ích của DRY. Mặt khác, các thử nghiệm DRY sẽ không đáp ứng các thử nghiệm DAMP trong một số trường hợp.
Tôi đã viết về DRY vs DAMP bao gồm một số ví dụ.
Không phải cách tiếp cận nào cũng là giải pháp duy nhất của bạn, đôi khi DAMP là quá mức cần thiết, đôi khi lại là một bổ sung rất hay.
Theo nguyên tắc chung, bạn nên áp dụng quy tắc ba. Nếu bạn phát hiện sao chép lần thứ ba, có thể đáng để xem xét việc viết các bài kiểm tra kiểu DAMP, nhưng ngay cả khi đó không phải tất cả các bản sao đều xấu . Các vấn đề bối cảnh.