Mockito Argument 매칭을 광범위하게 사용할 때는 명심해야 할 몇 가지 성능 고려 사항이 있습니다. Mockito는 일반적으로 효율적이지만 Argument Matchers의 광범위한 사용은 Mockito가 이러한 매칭을 처리하는 방식으로 인해 약간의 오버 헤드를 소개 할 수 있습니다.
1. 오버 헤드 매칭 처리 **
- 인수 매치 자 평가 :`eq ()`,`on ()`또는`anystring ()`와 같은 인수 매칭을 사용하면 Mockito는 런타임에 이러한 매치자를 평가해야합니다. 이 평가 프로세스는 정확한 값을 직접 통과하는 것과 비교하여 약간의 오버 헤드를 소개 할 수 있습니다. 그러나이 오버 헤드는 일반적으로 매우 많은 수의 호출 또는 복잡한 매칭을 처리하지 않는 한 무시할 수 있습니다.2. 매치 자 조합 규칙 **
- 모든 인수는 매치자를 사용해야합니다. 하나의 인수에 인수 매칭자를 사용하는 경우 모든 인수는 매치자를 사용해야합니다. 이 규칙은 특정 조건이 필요한 경우 모든 인수에 매치기를 사용하는 경우 더 많은 장황 코드와 잠재적으로 더 많은 오버 헤드로 이어질 수 있습니다. 예를 들어, 메소드에 3 개의 매개 변수가 있고 그 중 하나에`uy ()`를 사용하려면 정확한 값을 사용할 수 있더라도 다른 두 가지에 대해서도 마칭자를 사용해야합니다.3. 커스텀 매치 자 **
- 복잡한 논리 : Mockito는 광범위한 내장 마칭자를 제공하지만 특정 논리를 위해 사용자 정의 매칭을 만들어야 할 수도 있습니다. 커스텀 매치자는 복잡한 로직 또는 작업이 포함 된 경우 계산적으로 더 비싸 질 수 있습니다. `argumentmatcher '인터페이스를 구현하고 임의의 검사를 수행 할 수있는`matches ()`메소드를 정의해야하기 때문입니다.4. 검증 오버 헤드 **
- 매치 자와의 확인 :`verife ()`를 사용하여 모의 개체와의 상호 작용을 확인할 때 Mockito는 매치자를 사용하여 올바른 인수가 통과되었는지 확인합니다. 스터 빙과 유사하게, 매칭 자와의 확인은 특히 복잡한 매칭 자로 여러 통화를 확인하는 경우 약간의 오버 헤드를 소개 할 수 있습니다.5. 성능을위한 모범 사례 **
- 특이성을 현명하게 사용하십시오 : 올바른 수준의 특이성이있는 매칭자를 사용하십시오. 예를 들어,`onyint ()`는`eq (4)`보다 덜 구체적이고 빠르지 만 특정 값을 확인해야 할 때`eq (4)`를 사용하는 것이 더 정확하고 성능에 크게 영향을 미치지 않습니다.- 불필요한 복잡성을 피하십시오 : 필요하지 않은 경우 사용자 정의 매칭을 피하십시오. 테스트에 인수와 일치하는 복잡한 논리가 필요한 경우 테스트를 단순화하거나 기존 매칭자를 창의적으로 사용하는 것을 고려하십시오.
- 테스트 프로파일 : 테스트에 성능 문제가 표시되면 병목 현상을 식별하도록 프로파일 링하십시오. Mockito 매칭자가 중요한 성능 문제의 주요 원인이되는 것은 드물지만 항상 확인하는 것이 좋습니다.
요약하면, Mockito Argument Matchers는 약간의 오버 헤드를 소개하지만, 이는 매우 복잡하거나 성능이 높은 테스트를 다루지 않는 한 일반적으로 큰 관심사는 아닙니다. 테스트 코드의 유연성 및 선명도와 같은 매치 업체를 사용하면 일반적으로 경미한 성능 비용을 능가합니다.
인용 :[1] https://stackoverflow.com/questions/56559146/junit-using-eq-argument-matcher-vs-passing-string-directly/56572275
[2] https://www.digitalocean.com/community/tutorials/mockito-argument-matchers-any-eq
[3] https://kenkousen.substack.com/p/tales-from-the-jar-side-a-mockito
[4] https://www.softwaretestinghelp.com/mockito-matchers/
[5] https://www.toptal.com/java/a-guide-to-everyday-mockito
[6] https://github.com/etorreborre/specs2/issues/854
[7] https://www.lambdatest.com/automation-testing-advisor/selenium/classes/org.mockito.additionalmatchers
[8] https://stackoverflow.com/questions/73046134/when-should-i-ius-asument-matcher- 또는 passing-mockito-uni