2016-12-19 16 views
4

Мне сложно провести время в издевательских статических методах для контрольно-измерительных приборов (Espresso). Для насмешливых объектов я использую Mockito. Но, поскольку Mockito не может издеваться над статическими методами, я использую на нем Powermock. Это отлично работает для тестов, запущенных на машине JVM, но для UI Tests эта комбинация не работает нормально. Я прописал следующие зависимости для контрольных испытаний.Невозможно издеваться над статическими методами в контрольно-измерительных тестах

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) 

Что еще мне не хватает? Есть ли способ, в котором статические методы можно издеваться над тестами Espresso?

ответ

-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. Могли ли вы заставить Powermock работать с Espresso? – thedarkpassenger

2

PowerMock не работает с Espresso увидеть эту issue