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

相关推荐

    Test_invoke_interface.rar_INVOKE.INVOKE_interface

    在这个场景中,"Test_invoke_interface.rar_INVOKE.INVOKE_interface" 的标题暗示我们正在处理一个关于测试调用接口的项目,它可能是一个单元测试用例,用于验证Linux环境下的某个接口功能。 描述中提到 "Test ...

    PHP API接口测试小工具

    **PHP API接口测试小工具详解** API(Application Programming Interface)接口是软件系统间进行交互的一种方式,它定义了不同服务...在实际项目中,结合单元测试、集成测试和端到端测试,可以构建出更健壮的API服务。

    T_invoke_interface_1.rar_interface_invoke

    在Android的Dalvik虚拟机(或者现代的ART运行时)中,`invoke-interface`指令用于调用接口方法。这个操作码在Java字节码中扮演着重要的角色,特别是在多态性和面向接口编程的场景下。`T_invoke_interface_1.rar_...

    TDD:学习单元测试

    UT 该项目是使用版本11.2.5生成的。节点版本nvm use .nvmrc...运行单元测试运行ng test以通过执行单元测试。运行端到端测试运行ng e2e通过执行端到端测试。进一步的帮助要获得有关Angular CLI的更多帮助,请使用ng hel

    pytest_interface:基于pytest接口自动化测试

    内部会有不同业务线的测试用例层,编写测试用例逻辑,调用API层,进行接口流程自动化测试,并真的测试预期结果进行断言备注:推荐使用pytest单元测试框架+jenkins持续集成+allure报告,教程见:

    adb interface usb driver(adb驱动 32bit&64bit) 绿色版

    在这个"adb interface usb driver"绿色版压缩包中,包含了适用于32位和64位操作系统的adb USB驱动程序,用于解决在通过USB连接手机时出现的ADB驱动问题。 1. **ADB简介** ADB是Android开发者工具包的一部分,主要...

    FANUC Robot InterfaceV3.0安装包和C#测试程序Winform

    使用Fanuc机器人的 Robot Interface实现,在R-30iB mate plus型号上测试通过,支持读写任意的数据,如IO端口包含有SDI, SDO, RDI, RDO, UI, UO, GI, GO, SI, SO:资源包包含Robot Interface安装包、使用手册、C# ...

    OpenProtocolInterfaceTester

    OpenProtocol 阿拉特斯扭矩枪开放协议测试工具

    testing-mean-jasmine:使用 Jasmine platzi 的 MEAN 单元测试课程

    你也可以使用ng generate directive|pipe|service|class|guard|interface|enum|module 。 建造 运行ng build来构建项目。 构建工件将存储在dist/目录中。 使用--prod标志进行生产构建。 运行单元测试 运行ng test以...

    omnifoods-NG:专为纯学习目的而创建。 目标-单元测试,使用ngrx进行状态管理等

    全食现场演示: : 该项目是使用版本10.0.7生成的...运行单元测试运行ng test以通过执行单元测试。运行端到端测试运行ng e2e通过执行端到端测试。进一步的帮助要获得有关Angular CLI的更多帮助,请使用ng help或查看 。

    Angular-Crud-Jest:在Angular 10+中创建的基本Crud,用于使用Jest进行单元测试概念的应用

    您还可以使用ng generate directive|pipe|service|class|guard|interface|enum|module 。 建造 运行ng build来构建项目。 构建工件将存储在dist/目录中。 使用--prod标志进行生产构建。 运行单元测试 运行ng test以...

    go-test-interface-substitution:有关如何在Go中使用接口替换进行测试的简单示例

    关于如何在Go中使用接口替换进行测试的简单示例此仓库显示了一种无需测试即可重构具有测试依赖项的功能的方法。 这是一个简化的示例,基于出色的文章《编写单元测试时,请勿使用模拟》 (请参阅参考资料)。 示例...

    ElectronAndAngular:Angular的电子应用测试

    电子角该项目是使用版本8.3.20生成的。...运行单元测试运行ng test以通过执行单元测试。运行端到端测试运行ng e2e通过执行端到端测试。进一步的帮助要获得有关Angular CLI的更多帮助,请使用ng help或查看 。

    todos-tdd:[面向学生] Angular单元测试简介

    您还可以使用ng generate directive|pipe|service|class|guard|interface|enum|module 。 建造 运行ng build来构建项目。 构建工件将存储在dist/目录中。 使用--prod标志进行生产构建。 运行单元测试 运行ng test...

    ng-ut-demo:用于单元测试演示的演示应用程序

    您还可以使用ng generate directive|pipe|service|class|guard|interface|enum|module 。 建造 运行ng build来构建项目。 构建工件将存储在dist/目录中。 使用--prod标志进行生产构建。 运行单元测试 运行ng test以...

    http-list-with-karma-jasmine:用单元测试用业力和茉莉花角表

    宠物小精灵清单该项目是使用版本11.2.6生成...运行单元测试运行ng test以通过执行单元测试。运行端到端测试运行ng e2e通过执行端到端测试。进一步的帮助要获得有关Angular CLI的更多帮助,请使用ng help或查看“ 页面。

    googleAPI:使用google API进行测试

    GoogleApiTest 该项目是使用版本9.1.12生成的。...运行单元测试运行ng test通过执行单元测试。运行端到端测试运行ng e2e以通过执行端到端测试。进一步的帮助要获得有关Angular CLI的更多帮助,请使用ng help或查看 。

    计算器redux:Calculadora usando redux

    计算器该项目是使用版本10.2.0生成的。...运行单元测试运行ng test通过执行单元测试。运行端到端测试运行ng e2e以通过执行端到端测试。进一步的帮助要获得有关Angular CLI的更多帮助,请使用ng help或查看“ 页面。

    VirtualMarket-FRONTEND

    虚拟市场前沿该项目是使用版本11.0.7生成的...运行单元测试运行ng test以通过执行单元测试。运行端到端测试运行ng e2e通过执行端到端测试。进一步的帮助要获得有关Angular CLI的更多帮助,请使用ng help或查看“ 页面。

    weather-test:测试天气应用

    测试该项目是使用版本9.1.9生成的。开发服务器为开发服务器运行ng serve 。 导航到http://localhost:4200/ 。 如果您更改任何源文件,该应用程序将自动重新加载。代码脚手架运行ng generate component component-...

Global site tag (gtag.js) - Google Analytics