그러나 좋은 설계의 비용으로 재팩터링하는 것이 항상 올바른 해결책이 아닐 수도 있습니다. 이러한 시나리오에서는 Powermock과 같은 테스트 프레임 워크를 사용하여 정적, 최종 및 개인 메서드도 조롱 할 수 있습니다. Powermock의 좋은 점은 테스트 프레임 워크를 다시 발명하지 않고 실제로 Easymock 및 Mockito와 같은 테스트 프레임 워크를 향상시킨다는 것입니다. Mockito를 포함한 Java의 대부분의 모의 프레임워크는 정적 메서드 또는 최종 클래스를 모의할 수 없습니다. 이러한 구성 요소를 테스트해야 하는 상황이 발생하면 코드를 다시 팩터링하고 테스트할 수 없는 경우를 볼 수 없습니다. 예를 들어 두 번째 차이점은 스텁 메서드 내에서 입력을 사용할 수 있다는 것입니다. 아래 예제 참조: 정적 메서드의 사용은 개체 지향 개념에 어긋나지만 실제 환경에서는 여전히 많은 정적 메서드를 사용하며 정적 메서드를 사용하는 것이 합리적일 때가 있습니다. 그럼에도 불구하고 정적 방법을 조롱하는 능력은 우리에게 유용 할 수 있습니다. 이 예제에서는 정적 비보이드 메서드를 스텁합니다. 입력을 평가하려면 Mochito.verify 및 ArgumentCaptor를 사용해야 합니다. 아래 예제 코드를 참조하십시오: GitHub의 소스를 예로 들어 보세요. 또한 제이웨이 팀 블로그에서 PowerMockito 관련 블로그를 읽어보십시오. 3) 우리는 모키토 확장 및 JUnit 테스트 프레임 워크를 사용하여 우리의 모든 예제를 개발할 예정이기 때문에, powermock-mockito-junit-1.6.zip 파일을 다운로드합니다.

당신이 개인 방법, 정적 방법, 공용 사설 생성자 및 DB 연결의 중요한 조롱 중 하나를 조롱하는 몇 가지 예를 설명 할 경우 매우 도움이됩니다 … 당신이 응답 할 수 있기를 바랍니다,, 감사합니다 …. 모키토 매치는 여전히 PowerMock 모의에 적용될 수 있습니다. 예를 들어, 모의 정적 메서드당 사용자 지정 인수 일치자 사용: PowerMock의 한 기능은 때때로 매우 편리하며 @PowerMockRunnerDelegate 개의 추가를 사용하여 다른 JUnit 러너에 위임할 수 있습니다. 이는 다음 코드 조각에 표시되며 전체 예제는 여기에서 찾을 수 있습니다. 사실 그게 정말 많았어요. 우리는 모든 것이 합리적일 수 있도록 간단한 예제를 사용했습니다. 정적 메서드를 사용하여 클래스 이름을 명시적으로 사용했기 때문에 이 테스트를 실행할 준비가 되었습니다. 지금까지 표시된 개념을 사용하면 대부분의 “표준 사용 사례”를 다룰 수 있어야 합니다. 그러나 물론 한 가지 중요한 질문에 대한 대답은 여전히 없습니다 : 예를 들어 공동 작업자의 정적 메서드가 사용되는 경우 는 무엇입니까? 아마 지금은이 :-)에 대한 답을 추측하는 것은 어렵지 않습니다. void 메서드를 모의해야 하는 경우 Mockito.doAnswer를 사용할 수 있습니다.

아래 예제 를 참조하십시오: 먼저 PowerMocito를 사용하여 메서드를 모의하는 간단한 예제를 볼 수 있습니다. 컨트롤러 와 서비스 클래스를 만듭니다. 컨트롤러 클래스는 사용자 작업을 수행하는 데 사용할 서비스 클래스에 대한 참조를 갖습니다. 모의 가 무대에 진입하여 모키토와 파워모크를 할 때입니다. 두 도구 모두 테스트 중인 클래스의 공동 작업자를 모의 개체로 대체하여 “숨기기”합니다. 둘 사이의 작업의 분할은 Mockito가 모든 표준 사례에 대해 좋은 반면 PowerMock은 더 어려운 경우에 필요하다는 것입니다. 여기에는 정적 및 개인 메서드를 조롱하는 것이 포함됩니다. 예를 들어 스텁StaticNonVoidMethod에서는 SomeSystem.startServiceStaticWay를 스텁하여 1을 반환합니다.

PowerMockito를 사용하여 우리는 스텁뿐만 아니라 개인 방법을 확인할 수 있습니다. 이 예제에서는 개인 메서드를 스텁하는 방법을 보여 드리겠습니다. 아래 예제에서는 메서드가 있는 위치를 더 잘 이해하기 위해 Mockito 또는 PowerMockito API의 메서드에 대해 정적 가져오기를 사용하지 않습니다. 그러나 가독성을 향상시키기 위해 실제 테스트 사례에서 메서드를 정적으로 가져오는 것이 좋습니다.