Những lợi thế hữu hình của các Thử nghiệm đơn vị thích hợp so với Thử nghiệm chức năng được gọi là thử nghiệm đơn vị


9

Một dự án tôi đang thực hiện có một loạt các bài kiểm tra di sản chưa được chế giễu. Do đó, sự phụ thuộc duy nhất mà nó có là EasyMock, không hỗ trợ các thống kê, các nhà xây dựng với các đối số, v.v. Các thử nghiệm thay vào đó dựa vào các kết nối cơ sở dữ liệu và như vậy để "chạy" các thử nghiệm. Thêm powermock để xử lý các trường hợp này đang bị bắn hạ vì chi phí cấm do cần phải nâng cấp dự án hiện có để hỗ trợ nó (Một cuộc thảo luận khác).

Câu hỏi của tôi là, những lợi ích hữu hình trong thế giới THỰC của thử nghiệm đơn vị thích hợp mà tôi có thể sử dụng để đẩy lùi là gì? Có ai không Tôi chỉ là một người gắn bó bằng cách nói rằng các bài kiểm tra đơn vị xấu (ngay cả khi chúng hoạt động) là xấu? Là bảo hiểm mã chỉ có hiệu quả?


3
Có lẽ mã bạn đang viết có thể được hưởng lợi từ một số thay đổi cấu trúc để làm cho nó dễ kiểm tra hơn. Chúng tôi sử dụng thử nghiệm đơn vị rộng rãi tại cơ sở của chúng tôi mà không có khung mô phỏng, và nó dường như hoạt động khá tốt đối với chúng tôi.
Robert Harvey

Wow Tôi rất ấn tượng Tôi sẽ thích thú khi thấy cách bạn quản lý việc này với tích hợp JAR của bên thứ ba. Bạn có bất kỳ ví dụ hoặc liên kết?
Jackie

1
Chúng tôi không sử dụng tích hợp JAR của bên thứ ba. :) Tuy nhiên, chúng tôi tạo ra sơ khai, khi cần thiết; khuôn khổ chế giễu chỉ là một thuận tiện để đạt được cùng. Tuy nhiên, nếu quá trình đó chứng tỏ quá khó khăn, chúng tôi sẽ suy nghĩ lại về phương pháp mã hóa của mình.
Robert Harvey

Câu trả lời:


8
  • Tài nguyên

    Bạn cần một cơ sở dữ liệu kiểm tra để chạy các bài kiểm tra. Phần cứng để chạy cơ sở dữ liệu đắt hơn so với sử dụng powermock. Phát hành các tài nguyên được sử dụng để kiểm tra đơn vị dựa trên cơ sở dữ liệu có nghĩa là công ty không cần phải nâng cấp máy chủ sớm.

  • độ tin cậy

    Một bài kiểm tra có thể thất bại vì cơ sở dữ liệu bị hỏng hoặc ở trạng thái không nhất quán. Đoán xem, các bản dựng của bạn đã thất bại vì các DBA đã gỡ bỏ máy chủ dev trong ngày để thực hiện một số nâng cấp (và bây giờ các nhà phát triển đang cố gắng tìm ra lỗi trong mã - khi đó không phải là mã).

  • Bảo trì bổ sung

    Các xét nghiệm có thể được chạy theo thứ tự bất kỳ. Thêm hoặc xóa một bài kiểm tra sẽ không làm cho bộ kiểm tra thất bại. Chạy với cơ sở dữ liệu có nghĩa là có một số trạng thái ở đâu đó (trong cơ sở dữ liệu). Thông thường, các thử nghiệm này yêu cầu bảo trì thêm để đảm bảo rằng cơ sở dữ liệu duy trì trạng thái thích hợp cho thử nghiệm tiếp theo chạy.

  • Đồng thời

    Hai nhà phát triển chạy thử nghiệm đơn vị cùng một lúc. Có một cơ sở dữ liệu có nghĩa là các bài kiểm tra có thể va chạm vào cơ sở dữ liệu. Giải pháp cho vấn đề này là sao chép cơ sở dữ liệu cho mỗi bài kiểm tra đang chạy, điều này bị cấm trên cơ sở dữ liệu thực. Điều này dẫn đến một lựa chọn khác để xem xét.

Cũng xem xét sử dụng HSQLDB với bất kỳ phương ngữ nào của cơ sở dữ liệu bạn đang sử dụng. Bằng cách này, người ta có thể tạo một cơ sở dữ liệu trong bộ nhớ cho mỗi bài kiểm tra. Một thử nghiệm đơn vị chạy, xây dựng cơ sở dữ liệu cần thiết, tải dữ liệu, kết nối cơ sở dữ liệu từ mã kết nối với HSQLDB và chạy với dữ liệu thử nghiệm.


4

Câu hỏi của tôi là, những lợi ích hữu hình trong thế giới THỰC của thử nghiệm đơn vị thích hợp mà tôi có thể sử dụng để đẩy lùi là gì?

Các bài kiểm tra đơn vị tốt là (theo Mã sạch và các nơi khác):

  • Nhanh
  • Độc lập
  • Có thể lặp lại
  • Tự kiểm chứng
  • Hợp thời

Không có bài kiểm tra đơn vị thực sự vi phạm ba lần đầu tiên (và thường là lần cuối cùng). Điều này dẫn đến một số vấn đề khá quan trọng:

  1. Bài kiểm tra của bạn chậm. Kiểm tra chậm được chạy không thường xuyên. Các xét nghiệm không chạy gần như vô dụng.
  2. Các thử nghiệm của bạn có thể thất bại do các lý do không liên quan đến mã bạn đang kiểm tra. Điều này làm cho việc tìm ra lý do tại sao các bài kiểm tra thất bại, lãng phí thời gian và khiến mọi người đổ lỗi cho môi trường hơn là mã.
  3. Khi cơ sở dữ liệu thay đổi, kết quả của bạn thay đổi. Nhận một số cơ sở dữ liệu trong trạng thái nhất quán, duy trì tốt cho các bài kiểm tra là tẻ nhạt, gây phiền nhiễu và dễ bị lỗi.

Nói chung, việc thiếu sự cô lập trong các bài kiểm tra đơn vị dẫn đến các bài kiểm tra tồi tệ hơn, mất nhiều thời gian hơn để viết, thời gian đầu tư lâu hơn và cung cấp ít niềm tin hơn vào cơ sở mã của bạn. Điều đó dẫn đến việc mọi người viết ít bài kiểm tra hơn hoặc bỏ qua các bài kiểm tra nhiều hơn, đó là vòng xoáy đi xuống hỗn loạn.


2

Các bài kiểm tra đơn vị chỉ là một công cụ được sử dụng để giúp nhà phát triển cung cấp mã đáng tin cậy. Nếu bạn nghĩ như sếp của bạn nghĩ, bạn sẽ có thể thuyết phục anh ta nếu những gì bạn đang đề xuất có ý nghĩa. Tuy nhiên, nếu bạn trình bày nó như một nhà truyền giáo trên một đoàn xe, bạn sẽ không nhận được tài nguyên được phân bổ. Bạn sẽ cần phải giải thích cho anh ta cách anh ta hưởng lợi bằng cách dành thời gian và tài nguyên kiểm tra lại đơn vị cho ứng dụng kế thừa của bạn.

Bạn đã đề cập đến các bài kiểm tra di sản - ngụ ý mã kế thừa. Thật không may, việc kiểm tra đơn vị phù hợp với mã không được thiết kế để kiểm tra đơn vị là một quá trình khó khăn, tốn thời gian và tốn kém. Trường hợp kinh doanh thậm chí còn khó hơn nếu bạn có các bài kiểm tra cung cấp kết quả hữu ích và tất cả những gì bạn sẽ đạt được là (từ trường hợp kinh doanh POV) các bài kiểm tra thay thế cung cấp kết quả tương tự. Bạn sẽ cần tập trung vào tiết kiệm chi phí (thời gian) .....

Tôi đoán là bạn sẽ không thể trình bày cho sếp của bạn một trường hợp kinh doanh mạnh mẽ bởi vì không có ai.


Tôi chắc chắn có thể thấy bạn đến từ đâu, tuy nhiên, tôi đã tìm kiếm nhiều hơn để làm cho trường hợp kinh doanh này. Không chỉ lo lắng về chất lượng ở lề là chi phí cấm.
Jackie

1

Từ những gì bạn mô tả, có vẻ như bạn không thích khung thử nghiệm A và muốn chuyển sang khung thử nghiệm B, cả hai đều hoạt động. Hút nó lên và sử dụng những gì hiện có và đang hoạt động, đừng tạo thêm công việc phát minh lại bánh xe để bạn có thể sử dụng khung kiểm tra ưa thích của mình.

Phải mất nhiều hơn một mong muốn sử dụng hương vị mới nhất của khung tháng để biện minh cho việc loại bỏ mã làm việc hiện có và tiêu tốn một lượng lớn thời gian và tiền bạc về cơ bản không mang lại lợi ích cho người dùng.


Không chính xác đây không phải là một khuôn khổ của khuôn khổ và hơn nữa là một phương tiện cho phép các bài kiểm tra truy cập vào tài nguyên khác. Do đó về cơ bản làm cho chúng kiểm tra chức năng thay vì kiểm tra đơn vị. Các "khung" là cả JUnit và EasyMock (Mặc dù các phiên bản cũ hơn). Tôi đã đề nghị thêm một khung phụ thuộc MỚI.
Jackie

1

Kiểm tra đơn vị tốt cung cấp nội địa hóa. Các kiểm tra chức năng có thể cho bạn biết "chức năng thêm người dùng bị hỏng", nhưng một bài kiểm tra đơn vị tốt sẽ cho bạn biết rằng nó bị hỏng do ai đó đã thay đổi trường USER.LAST_NAME trong cơ sở dữ liệu thành không rỗng. Cũng có thể kiểm tra các thay đổi nhỏ trực tiếp, thay vì cần một môi trường thử nghiệm phức tạp (có thể cần phải được khởi tạo lại hoặc thanh lọc cho một số thử nghiệ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.