2009-12-08 33 views
8

it happens with private methods, tài liệu phương pháp thử nghiệm đơn vị chỉ có thể được xem bởi những người có quyền truy cập vào mã nguồn. Có đáng để nỗ lực dành cho nó không?Tôi có nên ghi lại các phương pháp thử nghiệm đơn vị của mình không?

By tài liệu tôi có nghĩa là một cái gì đó tương tự (nhưng mô tả nhiều hơn):

/// <summary> 
///A test for SomeClass.SomeMethod 
///</summary> 
[TestMethod()] 
public void SomeMethodTest() 
{ 
} 

Trả lời

13

Bài kiểm tra đơn vị phải nhằm mục đích tự mô tả, nhưng sẽ luôn có những trường hợp không thể đạt được mục tiêu này và do đó mô tả nội dung đã ghi là do.

Nói cách khác, hãy thử thực hiện các bài kiểm tra đơn vị của bạn để họ không cần tài liệu, nhưng nếu cần, hãy viết nó!

+2

Nhân tiện, tôi tin rằng tất cả các mã nên nhằm mục đích tự mô tả và chỉ có nhận xét khi bạn không thể lấy mã để kể toàn bộ câu chuyện. Kiểm tra đơn vị chỉ làm cho điều này rõ rệt hơn (vì mã kiểm thử đơn vị thường đơn giản hơn). –

13

Tôi thà được nghiêng để nói rằng bạn nên đặt tên phương pháp thử nghiệm của bạn trong một cách đó là biểu cảm liên quan đến những gì nó kiểm tra: SomeMethodWillBehaveThisWayWhenCalledWithTheseParameters() mặc dù một số người có thể thấy rằng gây tranh cãi.

+4

Tôi vừa phát hiện ra tên "when_ * condition * _should_ * doThis *" đặt tên cho các phương thức. –

+0

Tên chức năng mô tả là hữu ích nhưng đặt trong câu hoàn chỉnh là một chút quá nhiều đối với tôi. – stimpie

+1

Đồng ý. Tôi thường đặt tên cho các bài kiểm tra đơn vị sử dụng S/S/R: Subject, Scenario, expected Result.(http://blog.codeville.net/2009/08/24/writing-great-unit-tests-best-and-worst-practises/) Không thực sự có nghĩa là bạn không nên tài liệu mã của bạn mặc dù. –

2

Bạn nên ghi lại tất cả mã.

Để kiểm tra đơn vị, tôi thường nói những gì tôi đang thử nghiệm, cách thử nghiệm. Đưa "Kiểm tra cho Class.someMethod" không phải là rất hữu ích.

5

Ồ vâng!

Ngay cả khi "người có quyền truy cập vào mã nguồn" sẽ không bao giờ là bất kỳ ai khác ngoài bạn, nó sẽ không giống với bạn trong một năm (hoặc thậm chí một tháng kể từ bây giờ), hãy tin tôi trên một :-)

+0

+1 kẻ giết người điên cuồng giết người biết bạn sống ở đâu có lẽ là chính bạn! – SingleNegationElimination

1

Tôi nghĩ rằng việc kiểm tra đơn vị tài liệu là tốt, lý do chính của tôi là bạn có thể giải thích tại sao chức năng cụ thể được kiểm tra. Kiểm tra đơn vị của tôi có xu hướng kết thúc với tất cả các loại thông số cực kỳ lạ hoặc bất ngờ.

Nếu kiểm tra không thành công một lập trình viên tương lai (hoặc bạn có bộ nhớ kém), hãy biết lý do tại sao một chức năng được kiểm tra/triển khai.

1

Có. Các thử nghiệm có vẻ như tự tài liệu, nhưng các cuộc cách mạng mà bạn phải trải qua đôi khi để tạo ra dữ liệu thử nghiệm có ý nghĩa có nghĩa là mọi thứ có thể không rõ ràng ngay với người bảo trì cuối cùng, ai có thể là BẠN! Làm cho cuộc sống của bạn dễ dàng hơn - ghi lại mã của bạn.

1

Bài kiểm tra đơn vị phải đủ đơn giản và đủ tiết để dễ hiểu. Nếu bạn cần phải bình luận kiểm tra đơn vị của bạn, có lẽ bạn nên thay đổi tên của nó, hoặc có thể bạn nên refactor nó thành các phương pháp nhỏ hơn.

Kiểm tra tái cấu trúc là một thực hành tốt, bạn phải tái cấu trúc các thử nghiệm của bạn trên thực tế, hoặc chúng sẽ trở thành không thể duy trì.

Nhận xét như tôi thấy chúng hầu như luôn là dấu hiệu cho thấy bạn nên cấu trúc lại đoạn mã bạn cần nhận xét. Điều gì áp dụng cho mã sản xuất áp dụng cho mã thử nghiệm.

1

Hầu hết các bài kiểm tra đơn vị không cần tài liệu. Tên nên làm rõ phương pháp mà họ kiểm tra và đưa ra một dấu hiệu cho thấy kết quả mong đợi. Mã nên đơn giản và rõ ràng. Bài kiểm tra đơn vị không nên triển khai quy tắc kinh doanh, vì vậy việc ghi lại "lý do" thường không cần thiết.

Trong trường hợp hiếm hoi mà thử nghiệm phải đủ phức tạp để đảm bảo nhận xét, chúng phải được ghi lại giống như bất kỳ mã nào khác.

0

Đối với MSTest (IDK nếu NUnit có điều gì đó tương tự), nó hữu ích một DescriptionAttribute cho mỗi phương pháp thử nghiệm, vì chúng hiển thị trên Bảng kết quả kiểm tra trên Visual Studio. Dễ đọc hơn so với quy ước đặt tên WhenThisHappenShouldHappenThis.

0

Tôi tìm thấy thông báo được in ra bằng kiểm tra đơn vị khi nó chạy thường đủ. Ví dụ, trong Perl:

is(compare_bitstrings($bs1, $bs2, $gen), 1, 'compare_bitstrings - bs1 > bs2'); 

Cho

ok 74 - compare_bitstrings - bs1 > bs2 

khi chạy thành công. Điều đó cho tôi biết những gì tôi đang cố gắng làm, và câu trả lời sẽ là gì.

+0

Điểm tốt, nhưng chúng tôi biết điều này không áp dụng cho tất cả các khung kiểm tra đơn vị. –

2

Có. Lý do tôi nghĩ rằng các bài kiểm tra đơn vị tài liệu là một ý tưởng hay là trong quá trình phát triển nếu bạn sửa đổi không chỉ API của các lớp sản xuất mà là một số hành vi nội bộ gây ra một số thử nghiệm thất bại, thì nó tiết kiệm khá nhiều thời gian để điều hướng đến kiểm tra mã, đọc tài liệu kiểm tra đơn vị và xác định có hay không bạn sẽ mong đợi thử nghiệm thất bại cho thay đổi hành vi gần đây của bạn hoặc có thể một cái gì đó tinh tế hơn đang xảy ra.

Nếu không có tài liệu này, bạn sẽ phải tìm ra thử nghiệm thực hiện từ tên của nó và nhận xét/mã trong thử nghiệm. Lưu ý rằng nếu bạn chỉ đơn giản là viết lại tên của bài kiểm tra đơn vị trong tài liệu, thì điều này không phải là rất hữu ích và tôi chỉ cần gắn cho đơn vị kiểm tra tên mô tả (ví dụ: tài liệu nên có nhiều chi tiết hơn tên của bài kiểm tra đơn vị)

0

Tuyệt đối !! Kiểm tra đơn vị của bạn nên được ghi lại từng bit cũng như mã thực tế của bạn. Nếu không có lý do nào khác ngoài hoàn cảnh không phổ biến của việc không biết liệu đó có phải là mã của bạn hay thử nghiệm của bạn có lỗi.

0

Khi tôi viết bài kiểm tra, tôi thích nhận xét cho bài kiểm tra, kèm theo tên phương pháp thử nghiệm mô tả (như định dạng S/S/R được đề cập trong bình luận của câu trả lời khác). vào khi chúng tôi bắt đầu với CPPUNIT với C++. Khi tôi dabble trong C#, điểm được đề cập bởi Lucas trong câu trả lời của ông là một tốt - khi khuôn khổ cho phép, trường mô tả có thể được sử dụng trong mã nguồn VÀ kết quả là rất tiện dụng, và tôi sẽ ủng hộ một bình luận định dạng có thể sử dụng ở nhiều nơi như vậy.

Tất cả những gì được nói, tôi nghĩ bạn cần phải xem cách bạn hoặc nhóm phát triển của bạn thường xử lý nhận xét mã. Là folks trong swing chung, nơi họ cập nhật ý kiến ​​khi mã được cố định, refactored? Dự án có nhỏ hơn và sẽ luôn có cùng một vài nhà phát triển trên đó làm việc chặt chẽ với nhau không?

Các dự án tôi làm việc có quy mô lớn hơn và tùy thuộc vào tiểu bang, nhóm có thể được duy trì bởi một nhóm gần nhau, một nhóm từ xa hoặc đồng phát triển hoặc giao hoàn toàn cho nhà cung cấp. Trong kịch bản của tôi, chúng tôi cố gắng dành thời gian để ghi lại và duy trì tài liệu trong sản xuất và kiểm tra mã cho những người sẽ đến cùng trong tương lai.

Nếu bình luận thường là một suy nghĩ sau, nhiều như nó có thể làm tôi đau, nếu có cơ hội nhận xét của bạn sắp bị lỗi thời với mã/kiểm tra thực tế, nó có thể không có ý nghĩa để cố gắng thay đổi hiện trạng.

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