Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to mock method e in Log

Here Utils.java is my class to be tested and following is the method which is called in UtilsTest class. Even if I am mocking Log.e method as shown below

 @Before   public void setUp() {   when(Log.e(any(String.class),any(String.class))).thenReturn(any(Integer.class));             utils = spy(new Utils());   } 

I am getting the following exception

java.lang.RuntimeException: Method e in android.util.Log not mocked. See http://g.co/androidstudio/not-mocked for details.     at android.util.Log.e(Log.java)     at com.xxx.demo.utils.UtilsTest.setUp(UtilsTest.java:41)     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     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)     at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)     at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)     at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)     at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)     at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)     at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)     at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)     at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)     at org.junit.runners.ParentRunner.run(ParentRunner.java:363)     at org.junit.runner.JUnitCore.run(JUnitCore.java:137)     at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:78)     at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:212)     at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:68)     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)     at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140) 
like image 523
user3762991 Avatar asked Apr 22 '16 07:04

user3762991


People also ask

Can we mock a method?

Mocking is done when you invoke methods of a class that has external communication like database calls or rest calls. Through mocking you can explicitly define the return value of methods without actually executing the steps of the method.

How do you use Powermockito?

To use PowerMock with Mockito, we need to apply the following two annotations in the test: @RunWith(PowerMockRunner. class): It is the same as we have used in our previous examples. The only difference is that in the previous example we have used MockitoUnitRunner.


1 Answers

This worked out for me. I'm only using JUnit and I was able to mock up the Log class without any third party lib very easy. Just create a file Log.java inside app/src/test/java/android/util with contents:

package android.util;   public class Log {     public static int d(String tag, String msg) {         System.out.println("DEBUG: " + tag + ": " + msg);         return 0;     }      public static int i(String tag, String msg) {         System.out.println("INFO: " + tag + ": " + msg);         return 0;     }      public static int w(String tag, String msg) {         System.out.println("WARN: " + tag + ": " + msg);         return 0;     }      public static int e(String tag, String msg) {         System.out.println("ERROR: " + tag + ": " + msg);         return 0;     }      // add other methods if required... } 
like image 112
Paglian Avatar answered Oct 06 '22 05:10

Paglian