0 0

单元测试使用Mockit,测试interface的实际意义在哪里?25

学习和使用mockit这个框架的过程中,我发现我陷入了一个迷糊中,希望有人可以为我解答或者给出一些链接。

Mockit的文档第一个例子如下:

1. Let's verify some behaviour!

 //Let's import Mockito statically so that the code looks clearer
 import static org.mockito.Mockito.*;
 
 //mock creation
 List mockedList = mock(List.class);

 //using mock object
 mockedList.add("one");
 mockedList.clear();

 //verification
 verify(mockedList).add("one");
 verify(mockedList).clear();
 


我想知道的是,
如果一个List interface是编译通过的,上述代码例子中的测试的行为就是可预期的且一定成功的吗? 既然是一定成功,
为什么还需要专门的测试来测试这个接口?

问题可能很弱智,但是很纠结,希望有人可以为我解解惑。。。

问题补充:
suziwen 写道
引用
写接口的目的一般是,让这个接口的所有实现都具备某个共同的行为。这个行为不仅目前实现的类具备,将来要写的实现也都必须具备。因此,就需要为这个接口编写一个通用的测试程序,这个测试程序不仅能测试当前已经实现的类的通用属性,而且可以不加修改应用于将来要实现的类。



谢谢您的回复。

我的问题可能描述不是很清楚。首先有一个前提就是的:我的代码是Java写的。
所以问题应该如下:
1.像Java这样一种语言,如果我的Interface已经写好并且编译通过,应该意味着预期的行为就是正确的。我期望传入的参数以及我希望返回的数据类型,在编译阶段不就可以确定了吗?

2. 您的回答中有一句: “这个测试程序不仅能测试当前已经实现的类的通用属性”,我想问的是,针对接口的测试,如我在问题中所贴出的代码? 怎么能够“测试当前已经实现的类的通用属性”? 在这个测试中,没有任何跟具体的实现类的关联存在。我在代码中贴的测试只能测试到这个Interface本身的约定,并不能测试到任何具体的实现类?

谢谢。
2012年3月14日 14:31

3个答案 按时间排序 按投票排序

0 0

我来举个例子吧,譬如说某个功能你的代码需要调用另外一个模块,而这个模块还没有开发好,你又想测试你的代码,怎么办呢? 如果设计良好的话,你们之间的约定可能是通过interface来定义的,说白了就是什么方法,几个参数,返回值是什么。
然而你不想等到别人开发好了才做集成测试,这样就太迟了,严重影响代码的质量。
怎么办呢,你可能会用匿名内部类,或者自己实现那个interface的implementation class来模拟另外一个模块,可是你很快就会发现,如果interace定义了n个方法而你仅仅需要调用其中的一个,你不得不实现所有的方法,而且模拟同一个方法返回的不同情况,你还要写很多个不同的实现类。

这时候这些模拟框架就发威了, 一两行就搞定了
List mockedList = mock(List.class);
when(mockedList.get(0).thenReturn("fisrt");

另外的情况,比如你的代码要从部署server获取一些信息,例如jndi, 那么你的code同样可以模拟这些从某个接口取值,而对容器没有任何依赖。

这是我的一些粗浅的见解,欢迎批评指正。

2014年3月25日 10:50
0 0

引用
写接口的目的一般是,让这个接口的所有实现都具备某个共同的行为。这个行为不仅目前实现的类具备,将来要写的实现也都必须具备。因此,就需要为这个接口编写一个通用的测试程序,这个测试程序不仅能测试当前已经实现的类的通用属性,而且可以不加修改应用于将来要实现的类。


2012年3月14日 22:05
0 0

什么没玩过,jsunit,junit。。。。加QQ:503229799我给你测试源码

2012年3月14日 14:36

相关推荐

Global site tag (gtag.js) - Google Analytics