1. when and thenReturn
Mock can return different values depending on the parameters you pass in the method. When and Then Return are a sequence of methods used to specify the return value for a method call with pre-defined parameters.
Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | @Test <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">test1</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// create mock</span> MyClass test <span class="token operator">=</span> <span class="token function">mock</span> <span class="token punctuation">(</span> MyClass <span class="token punctuation">.</span> <span class="token keyword">class</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// define return value for method getUniqueId()</span> <span class="token function">when</span> <span class="token punctuation">(</span> test <span class="token punctuation">.</span> <span class="token function">getUniqueId</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">thenReturn</span> <span class="token punctuation">(</span> <span class="token number">43</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// use mock in test....</span> <span class="token function">assertEquals</span> <span class="token punctuation">(</span> test <span class="token punctuation">.</span> <span class="token function">getUniqueId</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">,</span> <span class="token number">43</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">// demonstrates the return of multiple values</span> @Test <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">testMoreThanOneReturnValue</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> Iterator <span class="token operator"><</span> String <span class="token operator">></span> i <span class="token operator">=</span> <span class="token function">mock</span> <span class="token punctuation">(</span> Iterator <span class="token punctuation">.</span> <span class="token keyword">class</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token function">when</span> <span class="token punctuation">(</span> i <span class="token punctuation">.</span> <span class="token function">next</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">thenReturn</span> <span class="token punctuation">(</span> <span class="token string">"Mockito"</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">thenReturn</span> <span class="token punctuation">(</span> <span class="token string">"rocks"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> String result <span class="token operator">=</span> i <span class="token punctuation">.</span> <span class="token function">next</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token string">" "</span> <span class="token operator">+</span> i <span class="token punctuation">.</span> <span class="token function">next</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">//assert</span> <span class="token function">assertEquals</span> <span class="token punctuation">(</span> <span class="token string">"Mockito rocks"</span> <span class="token punctuation">,</span> result <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">// this test demonstrates how to return values based on the input</span> @Test <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">testReturnValueDependentOnMethodParameter</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> Comparable <span class="token operator"><</span> String <span class="token operator">></span> c <span class="token operator">=</span> <span class="token function">mock</span> <span class="token punctuation">(</span> Comparable <span class="token punctuation">.</span> <span class="token keyword">class</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token function">when</span> <span class="token punctuation">(</span> c <span class="token punctuation">.</span> <span class="token function">compareTo</span> <span class="token punctuation">(</span> <span class="token string">"Mockito"</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">thenReturn</span> <span class="token punctuation">(</span> <span class="token number">1</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token function">when</span> <span class="token punctuation">(</span> c <span class="token punctuation">.</span> <span class="token function">compareTo</span> <span class="token punctuation">(</span> <span class="token string">"Eclipse"</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">thenReturn</span> <span class="token punctuation">(</span> <span class="token number">2</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">//assert</span> <span class="token function">assertEquals</span> <span class="token punctuation">(</span> <span class="token number">1</span> <span class="token punctuation">,</span> c <span class="token punctuation">.</span> <span class="token function">compareTo</span> <span class="token punctuation">(</span> <span class="token string">"Mockito"</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">// this test demonstrates how to return values independent of the input value</span> @Test <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">testReturnValueInDependentOnMethodParameter</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> Comparable <span class="token operator"><</span> Integer <span class="token operator">></span> c <span class="token operator">=</span> <span class="token function">mock</span> <span class="token punctuation">(</span> Comparable <span class="token punctuation">.</span> <span class="token keyword">class</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token function">when</span> <span class="token punctuation">(</span> c <span class="token punctuation">.</span> <span class="token function">compareTo</span> <span class="token punctuation">(</span> <span class="token function">anyInt</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">thenReturn</span> <span class="token punctuation">(</span> <span class="token operator">-</span> <span class="token number">1</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">//assert</span> <span class="token function">assertEquals</span> <span class="token punctuation">(</span> <span class="token operator">-</span> <span class="token number">1</span> <span class="token punctuation">,</span> c <span class="token punctuation">.</span> <span class="token function">compareTo</span> <span class="token punctuation">(</span> <span class="token number">9</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">// return a value based on the type of the provide parameter</span> @Test <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">testReturnValueInDependentOnMethodParameter2</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> Comparable <span class="token operator"><</span> Todo <span class="token operator">></span> c <span class="token operator">=</span> <span class="token function">mock</span> <span class="token punctuation">(</span> Comparable <span class="token punctuation">.</span> <span class="token keyword">class</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token function">when</span> <span class="token punctuation">(</span> c <span class="token punctuation">.</span> <span class="token function">compareTo</span> <span class="token punctuation">(</span> <span class="token function">isA</span> <span class="token punctuation">(</span> Todo <span class="token punctuation">.</span> <span class="token keyword">class</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">thenReturn</span> <span class="token punctuation">(</span> <span class="token number">0</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">//assert</span> <span class="token function">assertEquals</span> <span class="token punctuation">(</span> <span class="token number">0</span> <span class="token punctuation">,</span> c <span class="token punctuation">.</span> <span class="token function">compareTo</span> <span class="token punctuation">(</span> <span class="token keyword">new</span> <span class="token class-name">Todo</span> <span class="token punctuation">(</span> <span class="token number">1</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> When and then Return có thể <span class="token keyword">throw</span> một exeption Properties properties <span class="token operator">=</span> <span class="token function">mock</span> <span class="token punctuation">(</span> Properties <span class="token punctuation">.</span> <span class="token keyword">class</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token function">when</span> <span class="token punctuation">(</span> properties <span class="token punctuation">.</span> <span class="token keyword">get</span> <span class="token punctuation">(</span> ”Anddroid” <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">thenThrow</span> <span class="token punctuation">(</span> <span class="token keyword">new</span> <span class="token class-name">IllegalArgumentException</span> <span class="token punctuation">(</span> <span class="token operator">...</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">try</span> <span class="token punctuation">{</span> properties <span class="token punctuation">.</span> <span class="token keyword">get</span> <span class="token punctuation">(</span> ”Anddroid” <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token function">fail</span> <span class="token punctuation">(</span> ”Anddroid is misspelled” <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span> <span class="token class-name">IllegalArgumentException</span> ex <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// good!</span> <span class="token punctuation">}</span> |
The When and ThenReturn method string may return an exeption
Example
1 2 3 4 5 6 7 8 9 10 11 | Properties properties <span class="token operator">=</span> <span class="token function">mock</span> <span class="token punctuation">(</span> Properties <span class="token punctuation">.</span> <span class="token keyword">class</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token function">when</span> <span class="token punctuation">(</span> properties <span class="token punctuation">.</span> <span class="token keyword">get</span> <span class="token punctuation">(</span> ”Anddroid” <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">thenThrow</span> <span class="token punctuation">(</span> <span class="token keyword">new</span> <span class="token class-name">IllegalArgumentException</span> <span class="token punctuation">(</span> <span class="token operator">...</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">try</span> <span class="token punctuation">{</span> properties <span class="token punctuation">.</span> <span class="token keyword">get</span> <span class="token punctuation">(</span> ”Anddroid” <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token function">fail</span> <span class="token punctuation">(</span> ”Anddroid is misspelled” <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span> <span class="token class-name">IllegalArgumentException</span> ex <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// good!</span> <span class="token punctuation">}</span> |
2. “doReturn When” and “doThrow When”
doReturn () .. When () is similar to when () .. thenReturn (). It is very useful in creating mock methods to create exceptions during the Example test
1 2 3 4 5 6 7 8 9 10 | Properties properties <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Properties</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> Properties spyProperties <span class="token operator">=</span> <span class="token function">spy</span> <span class="token punctuation">(</span> properties <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token function">doReturn</span> <span class="token punctuation">(</span> “ <span class="token number">42</span> ” <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">when</span> <span class="token punctuation">(</span> spyProperties <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token keyword">get</span> <span class="token punctuation">(</span> ”shoeSize” <span class="token punctuation">)</span> <span class="token punctuation">;</span> String value <span class="token operator">=</span> spyProperties <span class="token punctuation">.</span> <span class="token keyword">get</span> <span class="token punctuation">(</span> ”shoeSize” <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token function">assertEquals</span> <span class="token punctuation">(</span> ” <span class="token number">42</span> ” <span class="token punctuation">,</span> value <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
doThrow is used to return an exeption.
Example
1 2 3 4 5 6 7 8 9 10 | Properties properties <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Properties</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> Properties spyProperties <span class="token operator">=</span> <span class="token function">spy</span> <span class="token punctuation">(</span> properties <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token function">doReturn</span> <span class="token punctuation">(</span> “ <span class="token number">42</span> ” <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">when</span> <span class="token punctuation">(</span> spyProperties <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token keyword">get</span> <span class="token punctuation">(</span> ”shoeSize” <span class="token punctuation">)</span> <span class="token punctuation">;</span> String value <span class="token operator">=</span> spyProperties <span class="token punctuation">.</span> <span class="token keyword">get</span> <span class="token punctuation">(</span> ”shoeSize” <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token function">assertEquals</span> <span class="token punctuation">(</span> ” <span class="token number">42</span> ” <span class="token punctuation">,</span> value <span class="token punctuation">)</span> <span class="token punctuation">;</span> |
3. Wrapping a Java object with Spy
@Spy or spy () method can be used to wrap a real object.
Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | <span class="token keyword">var</span> s <span class="token operator">=</span> <span class="token string">'Syntax Highlighting'</span> <span class="token punctuation">;</span> <span class="token template-string"><span class="token string">``</span></span> ` <span class="token keyword">import</span> <span class="token keyword">static</span> org <span class="token punctuation">.</span> mockito <span class="token punctuation">.</span> Mockito <span class="token punctuation">.</span> <span class="token operator">*</span> <span class="token punctuation">;</span> @Test <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">testLinkedListSpyWrong</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// Lets mock a LinkedList</span> List <span class="token operator"><</span> String <span class="token operator">></span> list <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">LinkedList</span> <span class="token operator"><</span> <span class="token operator">></span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> List <span class="token operator"><</span> String <span class="token operator">></span> spy <span class="token operator">=</span> <span class="token function">spy</span> <span class="token punctuation">(</span> list <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// this does not work</span> <span class="token comment">// real method is called so spy.get(0)</span> <span class="token comment">// throws IndexOutOfBoundsException (list is still empty)</span> <span class="token function">when</span> <span class="token punctuation">(</span> spy <span class="token punctuation">.</span> <span class="token keyword">get</span> <span class="token punctuation">(</span> <span class="token number">0</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">thenReturn</span> <span class="token punctuation">(</span> <span class="token string">"foo"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token function">assertEquals</span> <span class="token punctuation">(</span> <span class="token string">"foo"</span> <span class="token punctuation">,</span> spy <span class="token punctuation">.</span> <span class="token keyword">get</span> <span class="token punctuation">(</span> <span class="token number">0</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> @Test <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">testLinkedListSpyCorrect</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// Lets mock a LinkedList</span> List <span class="token operator"><</span> String <span class="token operator">></span> list <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">LinkedList</span> <span class="token operator"><</span> <span class="token operator">></span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> List <span class="token operator"><</span> String <span class="token operator">></span> spy <span class="token operator">=</span> <span class="token function">spy</span> <span class="token punctuation">(</span> list <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// You have to use doReturn() for stubbing</span> <span class="token function">doReturn</span> <span class="token punctuation">(</span> <span class="token string">"foo"</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">when</span> <span class="token punctuation">(</span> spy <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token keyword">get</span> <span class="token punctuation">(</span> <span class="token number">0</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token function">assertEquals</span> <span class="token punctuation">(</span> <span class="token string">"foo"</span> <span class="token punctuation">,</span> spy <span class="token punctuation">.</span> <span class="token keyword">get</span> <span class="token punctuation">(</span> <span class="token number">0</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> |
4. Veryfy the call on the mock object
Mockito keeps track of all method calls and parameters of a Mock object. Use verify () on Mock objects to verify that the specified conditions have been met.
example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | <span class="token keyword">import</span> <span class="token keyword">static</span> org <span class="token punctuation">.</span> mockito <span class="token punctuation">.</span> Mockito <span class="token punctuation">.</span> <span class="token operator">*</span> <span class="token punctuation">;</span> @Test <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">testVerify</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// create and configure mock</span> MyClass test <span class="token operator">=</span> Mockito <span class="token punctuation">.</span> <span class="token function">mock</span> <span class="token punctuation">(</span> MyClass <span class="token punctuation">.</span> <span class="token keyword">class</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token function">when</span> <span class="token punctuation">(</span> test <span class="token punctuation">.</span> <span class="token function">getUniqueId</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">thenReturn</span> <span class="token punctuation">(</span> <span class="token number">43</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// call method testing on the mock with parameter 12</span> test <span class="token punctuation">.</span> <span class="token function">testing</span> <span class="token punctuation">(</span> <span class="token number">12</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> test <span class="token punctuation">.</span> <span class="token function">getUniqueId</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> test <span class="token punctuation">.</span> <span class="token function">getUniqueId</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// now check if method testing was called with the parameter 12</span> <span class="token function">verify</span> <span class="token punctuation">(</span> test <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">testing</span> <span class="token punctuation">(</span> ArgumentMatchers <span class="token punctuation">.</span> <span class="token function">eq</span> <span class="token punctuation">(</span> <span class="token number">12</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// was the method called twice?</span> <span class="token function">verify</span> <span class="token punctuation">(</span> test <span class="token punctuation">,</span> <span class="token function">times</span> <span class="token punctuation">(</span> <span class="token number">2</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">getUniqueId</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// other alternatives for verifiying the number of method calls for a method</span> <span class="token function">verify</span> <span class="token punctuation">(</span> test <span class="token punctuation">,</span> <span class="token function">never</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">someMethod</span> <span class="token punctuation">(</span> <span class="token string">"never called"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token function">verify</span> <span class="token punctuation">(</span> test <span class="token punctuation">,</span> <span class="token function">atLeastOnce</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">someMethod</span> <span class="token punctuation">(</span> <span class="token string">"called at least once"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token function">verify</span> <span class="token punctuation">(</span> test <span class="token punctuation">,</span> <span class="token function">atLeast</span> <span class="token punctuation">(</span> <span class="token number">2</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">someMethod</span> <span class="token punctuation">(</span> <span class="token string">"called at least twice"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token function">verify</span> <span class="token punctuation">(</span> test <span class="token punctuation">,</span> <span class="token function">times</span> <span class="token punctuation">(</span> <span class="token number">5</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">someMethod</span> <span class="token punctuation">(</span> <span class="token string">"called five times"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token function">verify</span> <span class="token punctuation">(</span> test <span class="token punctuation">,</span> <span class="token function">atMost</span> <span class="token punctuation">(</span> <span class="token number">3</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">someMethod</span> <span class="token punctuation">(</span> <span class="token string">"called at most 3 times"</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// This let's you check that no other methods where called on this object.</span> <span class="token comment">// You call it after you have verified the expected method calls.</span> <span class="token function">verifyNoMoreInteractions</span> <span class="token punctuation">(</span> test <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> |
5. Use @InjectMock to create dependencies via Mockito
Annotation @InjectMock implements constructors, methods, and fields depending on its type
example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">ArticleManager</span> <span class="token punctuation">{</span> <span class="token keyword">private</span> User user <span class="token punctuation">;</span> <span class="token keyword">private</span> ArticleDatabase database <span class="token punctuation">;</span> <span class="token keyword">public</span> <span class="token function">ArticleManager</span> <span class="token punctuation">(</span> User user <span class="token punctuation">,</span> ArticleDatabase database <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">super</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> user <span class="token operator">=</span> user <span class="token punctuation">;</span> <span class="token keyword">this</span> <span class="token punctuation">.</span> database <span class="token operator">=</span> database <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">initialize</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> database <span class="token punctuation">.</span> <span class="token function">addListener</span> <span class="token punctuation">(</span> <span class="token keyword">new</span> <span class="token class-name">ArticleListener</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
The above class is constructed via Mockito and its dependencies are expressed by Mock example objects
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | @ <span class="token function">RunWith</span> <span class="token punctuation">(</span> MockitoJUnitRunner <span class="token punctuation">.</span> <span class="token keyword">class</span> <span class="token punctuation">)</span> <span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">ArticleManagerTest</span> <span class="token punctuation">{</span> @Mock ArticleCalculator calculator <span class="token punctuation">;</span> @Mock ArticleDatabase database <span class="token punctuation">;</span> @Mock User user <span class="token punctuation">;</span> @Spy <span class="token keyword">private</span> UserProvider userProvider <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ConsumerUserProvider</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> @InjectMocks <span class="token keyword">private</span> ArticleManager manager <span class="token punctuation">;</span> @Test <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">shouldDoSomething</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// calls addListener with an instance of ArticleListener</span> manager <span class="token punctuation">.</span> <span class="token function">initialize</span> <span class="token punctuation">(</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token comment">// validate that addListener was called</span> <span class="token function">verify</span> <span class="token punctuation">(</span> database <span class="token punctuation">)</span> <span class="token punctuation">.</span> <span class="token function">addListener</span> <span class="token punctuation">(</span> <span class="token function">any</span> <span class="token punctuation">(</span> ArticleListener <span class="token punctuation">.</span> <span class="token keyword">class</span> <span class="token punctuation">)</span> <span class="token punctuation">)</span> <span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> |
Mockito can inject an object by Inject constructor, setter or properties.