2010-06-05 32 views

Trả lời

14

Ba nhược điểm:

  • Bạn phải sử dụng dịch vụ Java để làm bytecode thiết bị đo đạc.
  • Bạn không thể sử dụng tệp junit.jar đã ký được gửi kèm với Eclipse.
  • Bạn phải học một API giả. (Ngược lại với một đối tượng sơ khai)

Bạn luôn có thể thảo luận xem đó có phải là điều tốt để có thể giả lập một lớp học cuối cùng như JMockit có thể. Trừ khi đó là mã kế thừa, việc tái cấu trúc thường là một giải pháp thay thế tốt hơn.

Với IDE như Eclipse, tôi thấy mình sử dụng công cụ hỗ trợ để tạo ra các sơ khai trong lớp kiểm tra thường xuyên hơn so với chế nhạo (JMockit, Mockito, v.v.) trong thời gian gần đây. Ưu điểm của phương pháp này là nó rất đơn giản. Điều này đặc biệt tốt đẹp khi bạn có một nhóm với nhiều nhà phát triển và một số người trong số họ không thích thử nghiệm và có ít động lực để tìm hiểu một khuôn khổ mocking. Ngoài ra, triển khai sơ khai không có giới hạn khung!

Nếu bạn mở cho stubbing như một sự thay thế, bạn nên kiểm tra blog của Robert C. Martin về chế giễu và stubbing herehere

khác, có vẻ rất tốt! Mặc dù tôi chỉ có kinh nghiệm với JMock, EasyMock và kiến ​​thức cơ bản với JMockit.

+0

Vâng, tôi cũng tự hỏi mình, tôi muốn đi xa đến mức nào với chế nhạo. Mã của riêng tôi sử dụng Dependency Injection trong suốt, vì vậy việc chế nhạo không thực sự là một nhiệm vụ phức tạp (mặc dù tôi không phải lúc nào cũng sử dụng giao diện cho mọi thứ do nỗ lực bảo trì bổ sung + chi phí hoạt động khi được sử dụng với GWTRPC). Khi bạn nói bạn sử dụng công cụ hỗ trợ để tạo ra các sơ khai trong Eclipse - bạn có những công cụ nào trong tâm trí? –

+0

Chỉ hỗ trợ Java cốt lõi trong Eclipse. Ví dụ nếu bạn tạo một lớp riêng hoặc ẩn danh thực hiện giao diện mà bạn muốn khai báo, thì Eclipse có thể tạo ra một triển khai bộ xương. Chỉ cần nhấp vào + 1 sau khi bạn đã chọn lớp học. – Espen

+0

Ah, ok - Tôi nghĩ có lẽ có một số công cụ giúp giữ phần còn lại đồng bộ, khi mã thay đổi hoặc thứ gì đó. –

15

Gần đây tôi đã thông qua một dự án sử dụng JMockit và tôi nghĩ rằng chất lượng của mã chắc chắn phải chịu do khả năng của thư viện giả lập các phương pháp tĩnh và riêng tư.

Các xét nghiệm này rất giòn vì chi tiết thực hiện nêu trong phương pháp tư nhân đang được thử nghiệm (vì vậy nếu tôi thay đổi cách lớp làm điều gì đó nó có thể phá vỡ các xét nghiệm, thậm chí nếu lớp nào không bị ảnh hưởng).

Mã này cũng được rải rác bằng các cuộc gọi đến các phương pháp tĩnh - nếu các nhà phát triển không có khả năng giả lập chúng thì tôi nghĩ họ sẽ nỗ lực hơn để loại bỏ mọi thứ tốt hơn một chút.

+0

Tôi không hiểu nhận xét này. Bạn nói rằng các bài kiểm tra đã trở nên giòn sau khi sử dụng JMockit b/c các chi tiết thực hiện trong các phương pháp riêng đã được ** thử nghiệm **. Nhưng chắc chắn khả năng giả lập các phương thức riêng tư như vậy sẽ giúp bạn giảm thiểu vấn đề bằng cách thực sự ** chế nhạo ** những phương thức riêng tư đó chứ không phải làm nặng thêm nó bằng cách ** thử nghiệm ** các phương thức riêng tư? Vì vậy, đã không JMockit làm việc ra trong lợi của bạn bằng cách làm cho bài kiểm tra của bạn tốt hơn so với không có nó? Chỉ tò mò thôi. – mystarrocks

+1

Tôi nghĩ rằng các bài kiểm tra bị giòn vì nếu ai đó tái cấu trúc một lớp (ví dụ như đổi tên/chia nhỏ/kết hợp một số phương thức nội bộ, hoặc thậm chí thay đổi hoàn toàn cách lớp hoạt động bên trong mà không thay đổi API công khai) thì các bài kiểm tra xung quanh lớp thử nghiệm phương pháp riêng của nó sẽ phá vỡ. Tôi không nghĩ rằng một bài kiểm tra đơn vị nên quan tâm như thế nào một lớp học công việc của mình, nó chỉ nên được quan tâm với việc công việc được thực hiện một cách chính xác hay không. Điều đó có làm cho nó rõ ràng hơn không? – codebox

+0

Ah, đúng vậy. Cảm thấy như [this] (http://stackoverflow.com/a/11834082/934307) bình luận chia sẻ cùng một tình cảm như bạn. Chúc mừng! – mystarrocks

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