2016-06-22 5 views
0

У меня есть фрагмент, который вызывает статический метод из другого класса Util. ?Mockito Test: проверка статического метода была вызвана внутри фрагмента

public class DummyFragment extends Fragment { 

    public void dummyMethodCall(){ 
     UtilClass.dummyStaticMethod(Arg arg); 
    } 

} 

Как я могу проверить, что UtilClass.dummyStaticMethod() была вызвана в тесте Mockito использованием PowerMockito Ниже мой текущий тест:

@RunWith(RobolectricGradleTestRunner.class) 
    @PowerMockIgnore({"org.mockito.*", "org.robolectric.*", "android.*"}) 
    @Config(constants = BuildConfig.class, sdk = 19, packageName = "com.dummy.package", application = DummyApplication.class) 
    @PrepareForTest({UtilClass.class}) 
    public class FragmentTest { 

    private DummyFragment mDummyFragment; 

    @Rule 
    public PowerMockRule rule = new PowerMockRule(); 

    @Before 
    public void setUp() { 
     mDummyFragment = new DummyFragment(); 
    } 

    @Test 
     public void dummyMethodCall_success() { 

      PowerMockito.mockStatic(UtilClass.class); 
      mDummyFragment.dummyStaticMethod(); 
      PowerMockito.verifyStatic(); 
     } 

    } 

Журнал ошибок:

java.lang.IllegalStateException: Failed to transform class with name android.app.Activity. Reason: android.app.LoaderManagerImpl 

at org.powermock.core.classloader.MockClassLoader.loadMockClass(MockClassLoader.java:267) 
at org.powermock.core.classloader.MockClassLoader.loadModifiedClass(MockClassLoader.java:180) 
at org.powermock.core.classloader.DeferSupportingClassLoader.loadClass(DeferSupportingClassLoader.java:70) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Class.java:264) 
at javassist.runtime.Desc.getClassObject(Desc.java:43) 
at javassist.runtime.Desc.getClassType(Desc.java:152) 
at javassist.runtime.Desc.getType(Desc.java:122) 
at javassist.runtime.Desc.getType(Desc.java:78) 
at com.dummy.package.DummyFragmentTest.setUp(DummyFragment.java:60) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) 
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) 
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24) 

ответ

1

Если вы хотите проверить, что он вызывается в вашем фактическом тесте, вы можете добавить в свой UtilClass булевой статический член, который вы установили в true в dummyStaticMethod(), затем проверьте это значение после того, как в вас сделан вызов r тест.

Если вы просто хотите проверить его на предмет отладки, вы можете запустить его в режиме отладки и установить точку останова в dummyStaticMethod или добавить System.out.print в этот метод.

+0

Спасибо за ваш ответ. К сожалению, тест выходит из строя, вызывая статический метод, потому что я, вероятно, не пользуюсь PowerMockito. Поэтому я не могу следовать первому подходу :( – Cbr

+0

Когда вы говорите, что это сбой, это тот же журнал, что и в вашем вопросе? Если это так, то проблема в том, что проблема в вашей настройке, в строке 60 DummyFragment. Или это новый сбой при вызове статического метода? –