We can use Mockito#verify(T mock) method to ensure whether a mock method was called with required arguments or not.
In other words Mockito#verify(T mock) is used to confirm that specific interactions took place.
Example
Example Application
package com.logicbig.example;
public interface MyService {
public int doSomething(String processName);
}
package com.logicbig.example;
public class MyProcessor {
private String processName;
private MyService myService;
public MyProcessor(String processName, MyService myService) {
this.processName = processName;
this.myService = myService;
}
public void process() {
int returnInteger = processName != null ? myService.doSomething(processName) : -1;
System.out.println("My Integer is: " + returnInteger);
}
}
Test to verify behavior
package com.logicbig.example;
import org.junit.Test;
import org.mockito.Mockito;
public class ProcessorTest {
@Test
public void processTest() {
MyService myService = Mockito.mock(MyService.class);
String processName = "dummy-process-name";
Mockito.when(myService.doSomething(processName))
.thenReturn(10);
MyProcessor myProcessor = new MyProcessor(processName, myService);
myProcessor.process();
Mockito.verify(myService).doSomething(processName);
}
}
D:\mockito-verify-method-example>mvn test -Dtest=ProcessorTest [INFO] Scanning for projects... [INFO] [INFO] ---------< com.logicbig.example:mockito-verify-method-example >--------- [INFO] Building mockito-verify-method-example 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ mockito-verify-method-example --- [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] [INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ mockito-verify-method-example --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ mockito-verify-method-example --- [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] [INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ mockito-verify-method-example --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ mockito-verify-method-example ---
------------------------------------------------------- T E S T S ------------------------------------------------------- Running com.logicbig.example.ProcessorTest My Integer is: 10 Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.732 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 3.671 s [INFO] Finished at: 2020-07-23T00:08:57-05:00 [INFO] ------------------------------------------------------------------------
Verification Failure
In case if verification fails:
package com.logicbig.example;
import org.junit.Test;
import org.mockito.Mockito;
public class ProcessorTest2 {
@Test
public void processTest() {
MyService myService = Mockito.mock(MyService.class);
String processName = null;
Mockito.when(myService.doSomething(processName))
.thenReturn(10);
MyProcessor myProcessor = new MyProcessor(processName, myService);
myProcessor.process();
Mockito.verify(myService).doSomething(processName);
}
}
D:\mockito-verify-method-example>mvn test -Dtest=ProcessorTest2 [INFO] Scanning for projects... [INFO] [INFO] ---------< com.logicbig.example:mockito-verify-method-example >--------- [INFO] Building mockito-verify-method-example 1.0-SNAPSHOT [INFO] --------------------------------[ jar ]--------------------------------- [INFO] [INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ mockito-verify-method-example --- [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] [INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ mockito-verify-method-example --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ mockito-verify-method-example --- [WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent! [INFO] [INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ mockito-verify-method-example --- [INFO] Nothing to compile - all classes are up to date [INFO] [INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ mockito-verify-method-example ---
------------------------------------------------------- T E S T S ------------------------------------------------------- Running com.logicbig.example.ProcessorTest2 My Integer is: -1 Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 1.055 sec <<< FAILURE! processTest(com.logicbig.example.ProcessorTest2) Time elapsed: 0.916 sec <<< FAILURE! Wanted but not invoked: myService.doSomething(null); -> at com.logicbig.example.ProcessorTest2.processTest(ProcessorTest2.java:16) Actually, there were zero interactions with this mock.
at com.logicbig.example.ProcessorTest2.processTest(ProcessorTest2.java:16) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:567) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306) at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63) at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329) at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293) at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306) at org.junit.runners.ParentRunner.run(ParentRunner.java:413) at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252) at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141) at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:567) at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189) at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165) at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85) at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115) at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)
Results :
Failed tests: processTest(com.logicbig.example.ProcessorTest2): (..)
Tests run: 1, Failures: 1, Errors: 0, Skipped: 0
[INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 4.614 s [INFO] Finished at: 2020-07-23T00:09:14-05:00 [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test (default-test) on project mockito-verify-method-example: There are test failures. [ERROR] [ERROR] -> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
Example ProjectDependencies and Technologies Used: - mockito-core 3.3.3: Mockito mock objects library core API and implementation.
- junit 4.13: JUnit is a unit testing framework for Java, created by Erich Gamma and Kent Beck.
- JDK 8
- Maven 3.5.4
|