我是
靠谱客的博主
含糊蜡烛,最近开发中收集的这篇文章主要介绍
Java mock工具-mockito,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
转载自:http://blog.iamzsx.me/show.html?id=118001
Mockito是目前java中使用比较流行的mock工具。http://code.google.com/p/mockito/
所谓的mock,就是指,如果我们写的代码依赖于某些对象,而这些对象又很难手动创建,那么就使用一个虚拟的对象来测试。
下面举个例子。
如下所示,我写了一个类,randomSelect函数的主要功能是,根据weights数组指定的比例(概率),随机返回一个[0,weights.length)间的整数。
01 | import java.util.Random; |
03 | public class RandomUtil { |
05 | private final static Random DEFAULT_RANDOM = new Random(); |
07 | public static int randomSelect( int [] weights) { |
08 | return randomSelect(DEFAULT_RANDOM, weights); |
11 | public static int randomSelect(Random r, int [] weights) { |
12 | if (weights == null || weights.length == 0 ) { |
13 | throw new IllegalArgumentException( |
14 | "weights must not be an empty array" ); |
17 | int target = r.nextInt(MathUtil.sum(weights)); |
19 | for ( int i = 0 ; i < weights.length; i++) { |
20 | accumulator += weights[i]; |
21 | if (accumulator > target) { |
由于Random是一个系统的类,用来产生随机数,这样子我们无法控制Random的行为。如果不使用mockito,那么我们的测试代码可能是下面这样子。我们会写一个子类来继承Random,这样子我们就可以通过覆盖父类的方法来控制Random的行为了。
01 | import java.util.Random; |
03 | import org.junit.Assert; |
04 | import org.junit.Test; |
06 | public class TestRandomUtil { |
09 | public void testSelect() { |
10 | int [] weights = { 2 , 1 , 3 , 0 , 4 }; |
11 | int sum = MathUtil.sum(weights); |
12 | Random r = new IntArrayRandom(MathUtil.range( 0 , sum)); |
13 | int [] expected = new int [] { 0 , 0 , 1 , 2 , 2 , 2 , 4 , 4 , 4 , 4 }; |
14 | for ( int i = 0 ; i < sum; i++) { |
15 | Assert.assertEquals(expected[i], RandomUtil.randomSelect(r, weights)); |
19 | @SuppressWarnings ( "serial" ) |
20 | public static class IntArrayRandom extends Random { |
25 | public IntArrayRandom( int [] seq) { |
31 | public int nextInt( int n) { |
那么,使用mockito有什么好处呢,mockito可以帮我们省去IntArrayRandom这个类。见下面的代码:
01 | import static org.mockito.Mockito.mock; |
02 | import static org.mockito.Mockito.when; |
04 | import java.util.Random; |
06 | import org.junit.Assert; |
07 | import org.junit.Test; |
09 | public class TestRandomUtil { |
12 | public void testSelect() { |
14 | int [] weights = { 2 , 1 , 3 , 0 , 4 }; |
15 | int sum = MathUtil.sum(weights); |
17 | int [] expected = new int [] { 0 , 0 , 1 , 2 , 2 , 2 , 4 , 4 , 4 , 4 }; |
18 | for ( int i = 0 ; i < sum; i++) { |
19 | Random r = mock(Random. class ); |
20 | when(r.nextInt(sum)).thenReturn(i); |
21 | Assert.assertEquals(expected[i], |
22 | RandomUtil.randomSelect(r, weights)); |
可以看到,mockito帮我省掉了一大堆代码。这里只是很简单的例子,在实际开发中,可以大大提高编写单元测试的效率。
最后
以上就是含糊蜡烛为你收集整理的Java mock工具-mockito的全部内容,希望文章能够帮你解决Java mock工具-mockito所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复