Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Mockito에서 모의 ​​재설정을위한 모범 사례는 무엇입니까?


Mockito에서 모의 ​​재설정을위한 모범 사례는 무엇입니까?


Mockito에서 조롱을 재설정하는 것은 스터브와 상호 작용을 지우면서 모의 물체를 재사용 할 수있는 기능입니다. 그러나`reset ()`를 사용하는 것은 일반적으로 구조화되지 않은 테스트를 나타낼 수 있으므로 절대적으로 필요한 경우가 아니라면 일반적으로 권장하지 않습니다. 다음은 Mockito에서 모의 ​​재설정을위한 모범 사례입니다.

##`reset ()`를 사용할 때 이해합니다

-`reset ()`:`reset ()`가 존재하는 주된 이유는 레거시 코드 또는 타사 인터페이스에 사용 된 것과 같은 컨테이너를 주입 한 모의를 지원하는 것입니다. 대부분의 경우, 특히 잘 디자인 된 테스트 중심 코드의 경우`restet ()`를 사용하지 말고 대신 작고 집중된 테스트 방법을 만드는 데 중점을 두어야합니다 [2] [4].

- 코드 냄새 : 테스트 방법 내에서`reaset ()`를 사용해야한다면 테스트가 너무 복잡하거나 너무 많은 시나리오를 다루는 신호 일 수 있습니다. 이것은 테스트를 리팩터링하거나 테스트중인 코드를 리팩터링해야 할 필요가 있음을 나타낼 수 있습니다 [2].

##`reset ()`에 대한 대안

- 새로운 모의 생성 : 모의를 재설정하는 대신 각 테스트 방법에 대한 새로운 모의 인스턴스를 만드는 것을 고려하십시오. 이 접근법은 각 테스트가 깨끗한 슬레이트로 시작하여 현재 테스트에 영향을 미치는 이전 테스트의 상호 작용의 위험을 줄입니다 [4].

-`recloinVocations ()`: 호출 기록을 지우면서 만 사용하면 (예 : 스터브에 영향을 미치지 않고 상호 작용을 확인하기 위해)`mockito.clearInvocations ()`를 사용하십시오. 이 방법은 스터브를 재설정하지 않고 호출 기록을 제거하며, 이는 특정 시나리오에서 유용 할 수 있습니다 [4].

모의 재설정 모범 사례

- 각 테스트 후 재설정 : 조롱을 재설정 해야하는 경우 junit 또는`afceach ()

`````@이후 "를 사용하여 각 테스트 방법 후에 그렇게하십시오. 이를 통해 각 테스트는 깨끗한 모의 상태로 시작하도록합니다 [3] [10].

- 테스트 전에 재설정을 피하십시오 : 각 테스트 전에 조롱을 재설정하면 테스트 시작시 모의가있는 상태에 대한 혼란이 생길 ​​수 있습니다. 테스트 후 새로운 모의를 만들거나 재설정하는 것이 일반적으로 더 명확합니다 [10].

- 프레임 워크 기능 사용 : 스프링과 같은 프레임 워크에서`@mockbean`과 같은 주석을 사용하면 각 테스트 후 조롱 재설정을 자동으로 처리 할 수있어 수동 재설정이 필요하지 않습니다 [10].

결론

Mockito는 특정 사용 사례에 대한`reset ()`메소드를 제공하지만 일반적으로 클리너,보다 집중된 테스트 설계에 유리한 사용을 피하는 것이 좋습니다. 각 테스트에 대한 새로운 모의를 만들거나 프레임 워크 기능을 사용하여 모의 상태를 관리하면 수동 재설정없이 강력하고 유지 관리 가능한 테스트를 보장 할 수 있습니다.

인용 :
[1] https://www.tutorialspoint.com/mockito/mockito_resetting_mock.htm
[2] https://site.mockito.org/javadoc/current/org/mockito/mockito.html
[3] https://twitter.github.io/finatra/user-guide/testing/mocks.html
[4] https://softwareengineering.stackexchange.com/questions/188299/is-ne-anprident-of-mockitos-reset-method
[5] https://github.com/mockito/mockito-kotlin/issues/513
[6] https://symflower.com/en/company/blog/2024/how-to-mocking-spring-boot/
[7] https://www.lambdatest.com/automation-testing-advisor/selenium/methods/org.mockito.mockito.reset
[8] https://github.com/mockito/mockito/issues/183
[9] https://www.toptal.com/java/a-guide-to-everyday-mockito
[10] https://stackoverflow.com/questions/18164123/how-to-clean-up-mocks-in-spring-tests-when-using-mockito