Need help to write a unit test using Mockito and JUnit4 Need help to write a unit test using Mockito and JUnit4 android android

Need help to write a unit test using Mockito and JUnit4


Because of JUnit TestCase class cannot use Android related APIs, we have to Mock it.
Use PowerMockito to Mock the static class.

Add two lines above your test case class,

@RunWith(PowerMockRunner.class)@PrepareForTest(TextUtils.class)public class YourTest{}

And the setup code

@Beforepublic void setup() {    PowerMockito.mockStatic(TextUtils.class);    PowerMockito.when(TextUtils.isEmpty(any(CharSequence.class))).thenAnswer(new Answer<Boolean>() {        @Override        public Boolean answer(InvocationOnMock invocation) throws Throwable {            CharSequence a = (CharSequence) invocation.getArguments()[0];            return !(a != null && a.length() > 0);        }    });}

That implement TextUtils.isEmpty() with our own logic.

Also, add dependencies in app.gradle files.

testCompile "org.powermock:powermock-module-junit4:1.6.2"testCompile "org.powermock:powermock-module-junit4-rule:1.6.2"testCompile "org.powermock:powermock-api-mockito:1.6.2"testCompile "org.powermock:powermock-classloading-xstream:1.6.2"

Thanks Behelit's and Exception's answer.


Use PowerMockito

Add this above your class name, and include any other CUT class names (classes under test)

@RunWith(PowerMockRunner.class)@PrepareForTest({TextUtils.class})public class ContactUtilsTest{

Add this to your @Before

@Beforepublic void setup(){    PowerMockito.mockStatic(TextUtils.class);    mMyFragmentPresenter=new MyFragmentPresenterImpl();}

This will make PowerMockito return default values for methods within TextUtils

You would also have to add the relevant gradle depedencies

testCompile "org.powermock:powermock-module-junit4:1.6.2"testCompile "org.powermock:powermock-module-junit4-rule:1.6.2"testCompile "org.powermock:powermock-api-mockito:1.6.2"testCompile "org.powermock:powermock-classloading-xstream:1.6.2"


This is a known issue as mentioned by @Exception. In my case, I also stumbled upon same situation but on advice of senior dev decided to use Strings.isNullOrEmpty() instead of TextUtils.isEmpty(). It turned out to be a nice way to avoid it.

Update: I should better mention it that this utility function Strings.isNullOrEmpty() requires Guava library.