Chọn tên cho các bài kiểm tra tích hợp


13

Với các bài kiểm tra đơn vị, tên miền khá nhỏ, vì vậy thật dễ dàng. Tôi đã sử dụng methodName_conditions_result()sơ đồ của Osherove và thấy nó rất rõ ràng.

Nhưng với các bài kiểm tra tích hợp tôi cảm thấy như nó sẽ tạo ra một cái tên rất dài, và tôi phải đặt cái gì vào đó methodName? Làm thế nào để tôi đặt tên cho các lớp kiểm tra tích hợp?

Ví dụ thế giới thực của tên thử nghiệm tích hợp rất đáng hoan nghênh. Tôi hy vọng câu trả lời cũng sẽ giúp tôi hiểu rõ hơn về các bài kiểm tra này.


1
Tại sao câu hỏi này bị bỏ qua (hai lần)?
bigstones

Câu trả lời:


6

Tôi có một cách tiếp cận khác nhau với các bài kiểm tra đơn vị và tích hợp. Tôi cố gắng đặt tên cho chúng dựa trên các tính năng càng nhiều càng tốt. Sau đó, khi tất cả các bài kiểm tra vượt qua, bạn có thể thấy một danh sách tất cả các tính năng hoạt động và không hoạt động.

  • canRegister Người dùng
  • canHandleInvalidInput
  • canRelayDocumentB AmongServers
  • canCreateSchema
  • canLoginUsingWebService
  • canLoginUsingBasicAuth
  • canDeleteDocument
  • canAddDocument

Không phải lúc nào cũng thực dụng để đặt tên cho các bài kiểm tra theo cách này, nhưng nó có thể rất hữu ích đặc biệt là sau khi đọc qua hàng trăm bài kiểm tra đơn vị và tích hợp. Tên lớp bao gồm tất cả các phương thức bao gồm các phương thức này cũng phải là dấu hiệu cho thấy các tính năng đang được thử nghiệm. Nó sẽ giúp với tổ chức.

Tôi cũng đề nghị đặt tên bất kỳ bài kiểm tra đơn vị nào cho các lỗi với một tiền tố duy nhất như bugfix1002để chứng minh rằng lỗi đã được sửa.


5

Điều này thực sự được viết để trợ giúp cho các bài kiểm tra đơn vị, nhưng có lẽ bạn sẽ thấy rằng các quy tắc tương tự được áp dụng (ít nhiều) cho các bài kiểm tra tích hợp:

Kiểm tra bảy bước !

Sở thích của tôi là bất cứ điều gì bạn gọi nó, đó thực sự là tên bộ thử nghiệm (tên vật cố trên thẻ của chúng tôi), hiệu ứng bạn đang kiểm tra và thông báo xác nhận cần phải nổi bật và làm rõ nguyên nhân lỗi. Nếu bạn thấy dễ dàng nhất với cách đặt tên của Asherove, thì tôi hoàn toàn tán thành điều đó. Nhưng có lẽ mẹo là bạn điền vào phần "phương thức" với bất cứ điều gì làm cho điều kiện, kết quả và ngoại lệ có ý nghĩa.

Tôi rất vui khi thấy một bộ có tên "MakingADeposit" với một bài kiểm tra có tên "AccountDoesntExist" và một lỗi có nội dung "Ngoại lệ NonesuchAccount dự kiến ​​- không nhận được."

Ngoài ra, nếu bạn không phiền tôi tách tên bộ kiểm tra bằng "::", tôi sẽ ổn với "AccountHandling :: MakingADeposit_AccountDoesntExist_ThrowsAnException"

Thẻ cũng gợi ý rằng nếu bạn không có tên hay, hãy tiếp tục và đặt tên tốt hơn khi tên đó xảy ra với bạn (hy vọng là tốt trước khi gửi mã cho CI).


2

Các thử nghiệm tích hợp phải tuân theo một số quy tắc tương tự như các thử nghiệm đơn vị trong đó mỗi thử nghiệm phải được thử nghiệm một khía cạnh của một yêu cầu nhưng kiểm tra toàn bộ hệ thống. Lớp nên đặt tên cho toàn bộ điều đang được thử nghiệm, ví dụ "TpcInputValidation" và cách đặt tên của phương thức sẽ phản ánh rõ ràng những gì thử nghiệm đang cố gắng thực hiện mà không quá dài dòng, ví dụ: "ShouldRaiseValidationErrorWithBadDates ()".

Các phương pháp nên được thử nghiệm một khái niệm về tính năng và một số lượng lớn các xác nhận có thể chỉ ra điều khác. (Tham khảo "Mã sạch: Cẩm nang về thủ công phần mềm linh hoạt" trang 132, của Robert Martin).


Tại sao bạn tin rằng "một tính năng" thường tương đương với "một tính năng"? Có vẻ như bạn sẽ muốn khẳng định rằng hệ thống đang ở trạng thái mà bạn mong đợi nó sẽ hoạt động, có thể là bất kỳ số lượng xác nhận nào. Nhưng tôi lạc đề vì câu hỏi là về cách đặt tên chứ không phải làm thế nào để viết một bài kiểm tra tích hợp.
Jeremy Heiler

@Andrew, tôi không nói đó là một quy tắc khó, nhưng việc xem số lượng các xác nhận có thể giúp với hướng dẫn kiểm tra một khái niệm về tính năng không nhất thiết phải theo một phương pháp. Giữ chúng phần nào giới hạn trong phạm vi giúp xác định các vấn đề xảy ra khi chúng thất bại. Nhưng tôi sẽ cho bạn biết rằng thật tuyệt khi nói một điều khẳng định và tôi sẽ chỉnh sửa nó, cảm ơn.
Chìa khóa trao tay

1

Vì vậy, vấn đề là một tên thích hợp của chức năng là quá dài cho một tên phương thức? Tôi biết thật khó xử khi bắt đầu viết các phương thức thử nghiệm với các tên như registerAndValidateUnderageUniversityDriverWithCoverageSetA_test()và có thể phá vỡ các quy tắc trình biên dịch cho các tên phương thức dài (PL / SQL chỉ cho phép tối đa 30 ký tự - Tôi không biết nếu Java và C # áp đặt các giới hạn tên ngắn như vậy, nhưng thậm chí nếu họ không thực hiện được một cách khó hiểu qua một điểm nhất định và các tên phương thức thực sự dài có thể chỉ hữu ích cho mã được tạo được đọc / quản lý bởi mã được tạo khác). Bạn có thể cố gắng rút ngắn nó xuống regValUnderageUnivDrvrWCovrgA_test()nhưng điều đó cũng thực sự khủng khiếp để đọc. Một lựa chọn tôi đã sử dụng mà tôi không thích nhưng là lựa chọn tốt nhất vào thời điểm đó làunderageUnivDrvr_test_01()và sau đó có một bảng tính ánh xạ các tên phương thức thành một mô tả dài hơn nhiều về chức năng đang được thử nghiệm. Xấu xí, nhưng nó đã làm việc Bạn cũng có thể ghi lại mô tả thử nghiệm trong tài liệu của hàm trong tệp nguồn, điều này có thể hữu ích vì bạn có thể tạo tài liệu về các thử nghiệm trực tiếp từ mã, thay vì ánh xạ qua lại giữa bảng tính và mã.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.