2016-12-19 2 views
4

계측 (Espresso) 테스트를 위해 정적 메서드를 조롱하는 데 어려움을 겪고 있습니다. 객체 조롱을 위해 Mockito을 사용하고 있습니다. 그러나 Mockito은 정적 메소드를 모방 할 수 없으므로, 위에 Powermock을 사용하고 있습니다. JVM 시스템에서 실행되는 테스트에서는 정상적으로 작동하지만 UI 테스트에서는이 조합이 제대로 작동하지 않습니다. 필자는 계측 테스트에 대해 다음과 같은 종속성을 선언했습니다.계측 테스트에서 정적 메서드를 모의 할 수 없습니다.

androidTestCompile 'org.mockito:mockito-core:1.10.19' 
androidTestCompile 'org.powermock:powermock-api-mockito:1.6.5' 
androidTestCompile 'org.powermock:powermock-module-junit4:1.6.5' 
androidTestCompile 'com.google.dexmaker:dexmaker:1.2' 
androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.2' 
androidTestCompile 'com.android.support.test:runner:0.5' 
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2' 

다음과 같이 샘플 테스트를 작성합니다.

@RunWith(PowerMockRunner.class) 
@PowerMockRunnerDelegate(AndroidJUnit4.class) 

public class SampleTest { 

    @Test 
    public void test(){ 
    //Test Code. 
    } 
} 

이 코드는 성공적으로 컴파일하지만 실행 시간에, 그것은 나에게 다음과 같은 예외를 제공

java.lang.IllegalStateException: Extension API internal error: org.powermock.api.extension.proxyframework.ProxyFrameworkImpl could not be located in classpath. 
at org.powermock.reflect.proxyframework.ProxyFrameworkHelper.register(ProxyFrameworkHelper.java:35) 
at org.powermock.reflect.proxyframework.ClassLoaderRegisterProxyFramework.registerProxyframework(ClassLoaderRegisterProxyFramework.java:28) 
at org.powermock.tests.utils.impl.AbstractCommonTestSuiteChunkerImpl.registerProxyframework(AbstractCommonTestSuiteChunkerImpl.java:101) 
at org.powermock.tests.utils.impl.AbstractCommonTestSuiteChunkerImpl.chunkClass(AbstractCommonTestSuiteChunkerImpl.java:114) 
at org.powermock.tests.utils.impl.AbstractCommonTestSuiteChunkerImpl.<init>(AbstractCommonTestSuiteChunkerImpl.java:60) 
at org.powermock.tests.utils.impl.AbstractCommonTestSuiteChunkerImpl.<init>(AbstractCommonTestSuiteChunkerImpl.java:54) 
at org.powermock.tests.utils.impl.AbstractTestSuiteChunkerImpl.<init>(AbstractTestSuiteChunkerImpl.java:58) 
at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.<init>(JUnit4TestSuiteChunkerImpl.java:59) 
at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.<init>(AbstractCommonPowerMockRunner.java:32) 
at org.powermock.modules.junit4.PowerMockRunner.<init>(PowerMockRunner.java:34) 
at java.lang.reflect.Constructor.newInstance(Native Method) 
at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104) 
at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:86) 
at android.support.test.internal.runner.junit4.AndroidAnnotatedBuilder.runnerForClass(AndroidAnnotatedBuilder.java:77) 
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) 
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26) 
at org.junit.runner.Computer.getRunner(Computer.java:40) 
at org.junit.runner.Computer$1.runnerForClass(Computer.java:31) 
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) 
at org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:101) 
at org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:87) 
at org.junit.runners.Suite.<init>(Suite.java:81) 
at org.junit.runner.Computer.getSuite(Computer.java:28) 
at android.support.test.internal.runner.TestRequestBuilder.classes(TestRequestBuilder.java:789) 
at android.support.test.internal.runner.TestRequestBuilder.build(TestRequestBuilder.java:753) 
at android.support.test.runner.AndroidJUnitRunner.buildRequest(AndroidJUnitRunner.java:354) 
at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:260) 
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1879) 
내가 놓친 거지 뭐가

? 에스프레소 테스트에서 정적 방법을 조롱 할 수있는 방법이 있습니까?

답변

-1

Powermock을 사용하여 정적 방법을 모방 할 수 있습니다. 내 응용 프로그램에서 Log.java 클래스를 모의하는 데 사용했습니다. 아래의 예에서 보라 : 에스프레소 작동하지 않습니다

@RunWith(PowerMockRunner.class) 
@PrepareForTest({Log.class}) 

public class PowermockStaticExample { 

//fixme : complete with your members 

@Before 
public void setUp() throws Exception { 
    PowerMockito.mockStatic(YourStaticClass.class); 
    //Use Powermock annotation to mock what you want to 
} 

//fixme : complete with your methods to test 
+1

를 참조하십시오. 문제는 로컬 유닛 테스트와 함께 작동하지만 에스프레소 테스트에서는 작동하지 않는다는 것입니다. Powermock을 Espresso와 함께 사용할 수 있었습니까? – thedarkpassenger

2

PowerMock 나는 이미 내가 PowerMock를 사용하여 시도 언급이 issue

관련 문제