IllegalArgumentException with Mockito

I am trying to verify that "setTabs ()" is called when I run the "onCreate (IHomeView iHomeView)" method of my HomePresenter class. "SetTabs ()" is an interface method in IHomeView. To test it, I use mockito, but I get an illegal ArgumentException property when I call homeView.setTabs ()

I put my code here, it is very simple:

My simple test:

import junit.framework.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; import static org.fest.assertions.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.robolectric.util.FragmentTestUtil.startFragment; @RunWith(RobolectricTestRunner.class) public class HomeFragmentTest { @Test public void testOnCreateHomePresenter() { IHomeView homeViewMock = mock(IHomeView.class); HomePresenter homePresenter = new HomePresenter(); homePresenter.onCreate(homeViewMock); verify(homeViewMock, times(1)).setTabs(); } } 

IHomeView.class

 public interface IHomeView { public void setTabs(); } 

HomePresenter.java

 public class HomePresenter implements IHomePresenter { private IHomeView mHomeView; public void onCreate(IHomeView homeView) { mHomeView = homeView; mHomeView.setTabs(); } } 

HomeFragment → implements IHomeView

 public class HomeFragment extends RoboFragment implements IHomeView { @Inject HomePresenter mHomePresenter; @InjectView(R.id.tv1) TextView textView; @InjectView(R.id.progessbar) SmoothProgressBar progressBar; @InjectView(R.id.pager) private ViewPager mViewPager; @InjectView(R.id.tabs) private PagerSlidingTabStrip tabs; private TabAdapter mAdapter; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_home, container, false); if (rootView == null) throw new IllegalStateException("Can't inflate the view"); return rootView; } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); Logger.logWarning("=>onViewCreated()"); progressBar.setProgressiveStartActivated(true); mHomePresenter.onCreate(this); } @Override public void setTabs() { mAdapter = new TabAdapter(getChildFragmentManager(), getResources()); mViewPager.setAdapter(mAdapter); int marginBetweenPages = getMarginBetweenPages(); mViewPager.setPageMargin(marginBetweenPages); tabs.setViewPager(mViewPager); } } 

Build.gradle dependencies

 compile 'com.android.support:appcompat-v7:20.0.+' compile 'com.android.support:support-v4:20.+' compile 'com.crashlytics.android:crashlytics:1.+' compile 'net.hockeyapp.android:HockeySDK:3.0.2' compile 'com.squareup.retrofit:retrofit:1.6.1' compile 'com.squareup.okhttp:okhttp-urlconnection:2.0.0' compile 'com.squareup.okhttp:okhttp:2.0.0' compile 'com.github.castorflex.smoothprogressbar:library:0.5.2' compile 'com.astuetz:pagerslidingtabstrip:1.0.1' compile 'net.hockeyapp.android:HockeySDK:3.0.2' compile('org.roboguice:roboguice:3.0-alpha-2') { exclude module: 'asm' } compile('fr.avianey:facebook-android-api: +@aar ') { exclude group: 'com.google.android', module: 'support-v4' } // ================== TESTING LIBRARIES ====================== androidTestCompile 'junit:junit:4.10' androidTestCompile 'org.robolectric:robolectric:2.3' androidTestCompile 'com.squareup:fest-android:1.0.+' androidTestCompile 'org.bouncycastle:bcprov-jdk15on:1.50' androidTestCompile 'com.jakewharton:butterknife:5.1.0' androidTestCompile 'org.mockito:mockito-core:1.9.5' androidTestCompile 'com.google.dexmaker:dexmaker:1.0' androidTestCompile 'com.google.dexmaker:dexmaker-mockito:1.0' 

In addition, I tried to comment on all the methods inside setTabs (), but that will not work. I am using Mockito 1.9.5 and Robolectric 2.3. I am using Android Studio 0.8.1, and the command to run the test is:

 ./gradlew test 

I think the test is very simple, but I did not work. Can anyone tell me what I'm doing wrong?

I also include gradle output:

  java.lang.IllegalArgumentException at com.google.dexmaker.mockito.InvocationHandlerAdapter.invoke(InvocationHandlerAdapter.java:49) at com.sun.proxy.$Proxy31.setTabs(Unknown Source) at com.peerade.ave.presenters.HomePresenter.onCreate(HomePresenter.java:24) at com.peerade.ave.tests.HomeFragmentTest.testOnCreateHomePresenter(HomeFragmentTest.java:56) 

Gradle Test Executor 1 has completed the execution of tests.

Thank you very much!

FIXED!

If you remove dexmaker and dexmaker-mockito from androidTestCompile, it will work like a charm. I found a solution here: https://code.google.com/p/dexmaker/issues/detail?id=4

+6
source share
1 answer

In my case, updating Mockito and Dexmaker to the latest versions fixed the problem: androidTestCompile 'org.mockito:mockito-core:1.10.5' androidTestCompile 'com.crittercism.dexmaker:dexmaker:1.4' androidTestCompile 'com.crittercism.dexmaker:dexmaker-mockito:1.4' androidTestCompile 'com.crittercism.dexmaker:dexmaker-dx:1.4'

+7
source

Source: https://habr.com/ru/post/972713/


All Articles