Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Phương pháp thiết lập lại của Mockito khác với ClearInvocations như thế nào


Phương pháp thiết lập lại của Mockito khác với ClearInvocations như thế nào


Mockito cung cấp hai phương thức có thể được sử dụng để quản lý trạng thái giả trong quá trình thử nghiệm: `reset ()` và `ClearInvocations ()`. Mặc dù cả hai phương pháp đều được sử dụng để quản lý trạng thái giả, chúng phục vụ các mục đích khác nhau và có tác dụng riêng biệt đối với các giả.

mockito's `reset ()` Phương thức

Phương thức `reset ()` trong mockito được sử dụng để đặt lại hoàn toàn đối tượng giả. Điều này có nghĩa là nó không chỉ xóa số lượng gọi mà còn loại bỏ bất kỳ sự kiện đã được đặt trên giả. Điều này có thể có vấn đề vì nó yêu cầu bạn phải đánh máy lại giả sau khi đặt lại nếu bạn muốn duy trì hành vi cụ thể cho các bài kiểm tra của mình. Việc sử dụng `reset ()` thường không được khuyến khích vì nó có thể dẫn đến các bài kiểm tra phức tạp và ít tập trung hơn. Bạn nên tránh sử dụng `reset ()` trừ khi thực sự cần thiết, vì nó có thể che khuất ý định của các bài kiểm tra của bạn và khiến chúng khó duy trì hơn [1] [5] [7].

Mockito's `ClearInvocations ()` Phương thức

Phương thức `ClearInvocations ()`, được giới thiệu trong Mockito 2.1, cho phép bạn xóa số lượng gọi của một giả mà không cần đặt lại sự cố gắng của nó. Điều này có nghĩa là bạn có thể tiếp tục sử dụng các cuống tương tự trong khi đảm bảo rằng mỗi thử nghiệm bắt đầu với một bảng xếp hạng sạch liên quan đến các lời mời phương pháp. Phương pháp này rất hữu ích khi bạn cần xác minh các tương tác trong một kịch bản trạng thái hoặc khi sử dụng các khung phun phụ thuộc, nhưng nó vẫn nên được sử dụng một cách tiết kiệm. Nói chung, bạn nên tránh sử dụng `ClearInvocations ()` trừ khi cần thiết, vì nó cũng có thể làm phức tạp các bài kiểm tra nếu không được sử dụng một cách chu đáo [1] [4] [9].

Sự khác biệt chính

- STUBBING: `Đặt lại ()` Loại bỏ tất cả việc khai thác, yêu cầu bạn phải stub lại giả, trong khi `ClearInvocations ()` lá còn nguyên vẹn.
- Số lượng gọi: Cả hai phương thức Xóa số lượng gọi, nhưng `reset ()` thực hiện như vậy như là một phần của thiết lập lại đầy đủ, trong khi `ClearInvocations ()` cụ thể nhắm mục tiêu số lượng gọi.
- Độ phức tạp kiểm tra: Cả hai phương pháp có thể dẫn đến các thử nghiệm phức tạp hơn nếu không được sử dụng cẩn thận, nhưng `reset ()` có xu hướng gây ra nhiều vấn đề hơn do cần phải stub lại giả.

Tóm lại, trong khi cả hai phương pháp có thể được sử dụng để quản lý trạng thái giả, `reset ()` xâm lấn hơn và thường không được khuyến khích, trong khi `ClearInvocations ()` được nhắm mục tiêu nhiều hơn nhưng vẫn nên được sử dụng một cách thận trọng để duy trì các thử nghiệm sạch và tập trung.

Trích dẫn:
[1] https://softwareengineering.stackexchange.com/questions/188299/is-this-an-appropriate-use-of-mockitos-reset-method
[2] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.internal.MockitoCore.clearInvocations
[3] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.internal.MockitoCore.clearAllCaches
[4] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.Mockito.clearInvocations
[5] https://stackoverflow.com/questions/19441538/what-is-the-correct-alternative-to-resetting-a-mock-after-setup-in-mockito
.
[7] https://stackoverflow.com/questions/30081161/mockito-does-verify-method-reboot-number-of-times
[8] https://javadoc.io/doc/org.mockito/mockito-core/2.25.1/org/mockito/Mockito.html
[9] https://wesome.org/mockito-3-clear-invocations
[10] https://github.com/mockk/mockk/discussions/842