1. when and thenReturn
Mock có thể trả về những giá gía trị khác nhau tùy thuộc vào những tham số mà bạn truyển vào trong method. When and Then Return là chuỗi method đc sử dụng để chỉ định giá trị trả về cho một lời gọi method với các tham sỗ đã được xác định trc
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> |
Chuỗi method When and ThenReturn có thể trả về một 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() tương tự với when() .. thenReturn(). Nó rất hữu ích trong việc tạo ra các mock method để tạo ra ngoại lệ trong suốt quá trình test
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> |
doThrow được sử dụng để trả về một 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. Gói một đối tượng Java với Spy
@Spy hoặc spy() method có thể đc sử dụng để gói một đối tượng thực (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 theo dõi tất cả các lời gọi method, các tham số của một đối tượng Mock. Sử dụng verify() trên các đối tượng Mock để xác mình rằng các điều kiện đc chỉ định trc đó đã được đáp ứng.
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. Sử dụng @InjectMock để tạo sự phụ thuộc thông qua Mockito
Annotation @InjectMock thực thi các constructor, method, các field phụ thuộc vào type của nó
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> |
class trên đc xây dựng thông qua Mockito và các phụ thuộc của nó đc thể hiện bằng các đối tượng Mock
example
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 có thể inject một đốii tượng bằng cách Inject constructor, setter hoặc các property.