Java_UT_Mock 시리즈 의 - 04 Powermock 과 단일 모드
단일 모델 은 흔히 볼 수 있 는 창설 형 디자인 모델 로 이 모델 의 클래스 를 사용 하 는 실례 의 전역 유일 성 을 확보한다.그러나 UT 의 경우 클래스 의 생 성 과정 을 차단 하기 때문에 testability 는 논의 할 필요 가 있다.다음 사례 와 같이
public class ClassToUseSingleton {
public String invokeSingleton()
{
return Singleton.getInstance().printHelloWorld( "Hi!!!" );
}
}
상기 테스트 에 응 용 된 invoke Singleton 방법 은 하나의 Singleton 단일 사례 류 의 방법 으로 특정한 작업 을 완성 했다.이 사례 류 의 소스 코드 는 다음 과 같다.
public class Singleton
{
public String printHelloWorld( String value )
{
StringBuilder stringBuilder
= new StringBuilder( "The string value is: " );
return stringBuilder.append( value ).toString();
}
private static class SingletonInstance {
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonInstance.INSTANCE;
}
}
Mock 실현
상기 코드 를 관찰 한 결과 mock 의 난점 은
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.powermock.reflect.Whitebox;
import static org.junit.Assert.assertEquals;
@RunWith( PowerMockRunner.class )
@PrepareForTest(Singleton.class )
public class ClassToUseSingletonTest
{
@Test
public void testSingeton() throws Exception {
Singleton mockSingleton = PowerMockito.mock(Singleton.class);
Class clazz = Whitebox.getInnerClassType(Singleton.class, "SingletonInstance");
Whitebox.setInternalState(clazz, "INSTANCE", mockSingleton);
PowerMockito.when( mockSingleton.printHelloWorld( Mockito.anyString() ) )
.thenReturn( "Mocked!!" );
assertEquals( "Mocked!!",
new ClassToUseSingleton().invokeSingleton() );
}
}
사례 분석
이곳 은 주로 화이트 박스 라 는 도 구 를 사 용 했 는데,
Class clazz = Whitebox.getInnerClassType (Singleton.class, "SingletonInstance");
이 코드 를 통 해 내부 클래스 싱글 톤 인 스 턴 스 를 가 져 왔 습 니 다.그리고 mockSingleton 을 내부 개인 변수 인 "INSTANCE" 에 부여 합 니 다.
Whitebox.setInternalState(clazz, "INSTANCE", mockSingleton);
이렇게 해서 싱글 톤 인 스 턴 스. 인 스 턴 스 를 호출 할 때 mock 에 의 해 작 동 된 싱글 톤 대상 mock Singleton 으로 돌아 가 는 것 을 실현 합 니 다. 즉, 단일 모드 에 대한 시 뮬 레이 션 을 실현 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.