JMockit学习笔记(二,mocked类型)
来源:互联网 发布:害怕异性亲密关系 知乎 编辑:程序博客网 时间:2024/05/16 17:36
Declaring and using mocked types
一个mock类型可以通过一个实例field或者一个参数声明来传入。对于第一种情况,这个field是属于测试类或者mockit.Expectations的子类(在某个expectation中的一个本地field)。对于第二种情况,该参数必须术语一个测试方法。
在所有的情况下,一个mock的field/parameter声明必须使用mockit.Mocked注释(@Mocked)。在expectation模块中,对于mockfield/parameter,是否使用该注释是可选的。只有当mock field在测试类中声明时,该注释(或者其他注释如@NonStrict)才是必须的。这个为了防止在测试类中有其他field不需要mock而产生冲突。
对于mockfields和parameters来说,所有种类的java类型都是有效的,除了primitive类型和数组类型。因此下面这些类型都是有效的:interfaces,concrete classes,abstract
classes,final
classes,enum
types,和annotationtypes。包括了JRE中的类型(如java.lang ,java.util中的类)。
对于一个在测试方法中声明的mock parameter,JMockit会自动为其创建一个实例,并且在该测试方法被调用时由JUnit/TestNGtest runner传入。因此该parameter永远不会为null。
对于一个mock field,JMockit不会自动为其创建一个实例并传给该field(final field除外)。在这种场景中,(finalfiled除外)。这是需要在测试代码中显示的创建并给field赋值。该值可能为null。
Mockedinstances
有JMockit创建的mocked实例可以在测试代码中正常使用。也可以将其传递给被测试的对象。当然也可以不使用。默认情况下,JMockit不关心mock实例被谁调用。使得在被测试代码中进行new操作时,可以直接来创建类的实例。这些类必须包含在测试代码中的mock类型中。
Mockingmultiple interfaces at the same time
假设被测试的代码中需要一个实现了两个或多个接口的对象。那我们是否能得到满足这些条件的mocked实例。
一种方法是,写一个test-specific的接口继承测试代码中需要的所有接口。然后将其作为mock类型来使用。
但一个更好的方法如下,该方法并不需要定义一个新的接口。
public interface Dependency // an arbitrary custom interface{ String doSomething(boolean b);}public final class MultiMocksTest<MultiMock extends Dependency & Runnable>{ @Mocked MultiMock multiMock; @Test public void mockFieldWithTwoInterfaces() { new NonStrictExpectations() {{ multiMock.doSomething(false); result = "test"; }}; multiMock.run(); assertEquals("test", multiMock.doSomething(false)); new Verifications() {{ multiMock.run(); }}; } @Test public <M extends Dependency & Serializable> void mockParameterWithTwoInterfaces(final M mock) { new Expectations() {{ mock.doSomething(true); result = "" }}; assertEquals("", mock.doSomething(true)); }}
在上面任意一个测试方法中,两个接口都会同时被mock:
一个mock field 中的Dependency 和java.lang.Runnable
一个mockparameter中的Dependency和java.io.Serializable
当我们使用MultiMock
和M类
型的变量时,JMockit就能知道他所包含的所有接口。
- JMockit学习笔记(二,mocked类型)
- JMockit学习笔记(一,简介)
- JMockit学习笔记
- JMockit学习笔记
- JUnit、DbUnit、JMockit学习笔记
- jmockit学习
- struts 学习笔记(二)类型转化
- MySQL学习笔记(二)--存储类型
- JMockit 中被 Mocked 的对象属性及方法的默认值
- Redis学习笔记(二)---String类型和hash类型
- JMockit简单使用(二)
- 编解码学习笔记(二):codec类型
- struts2学习笔记(二)——类型转换
- Python学习笔记(二):介绍Python对象类型
- 编解码学习笔记(二):codec类型
- C++ Primer学习笔记(二) 变量与基本类型
- C#高级编程学习笔记(二)---对象和类型
- 编解码学习笔记(二):codec类型
- metasploit编写自己的扫描器
- XML Configuration Access Protocol (XCAP)
- linux网络协议栈分析笔记5-IP层的处理1
- 题目1090:路径打印。N叉树
- 手把手教你把Vim改装成一个IDE编程环境(图文)
- JMockit学习笔记(二,mocked类型)
- 【0】关于汇编
- 经典排序算法 - 堆排序Heap sort
- 高亚科技公司笔试回来,贡献一下笔试题
- 第四次C程序上机报告
- 关于火星坐标系统
- gawk 使用详解
- QT入门-一个简单的计算器程序
- 有一个南北向的桥,只能容纳一个人,现桥的两边分别有10人和12人,编制一个多线程序让这些人到达对岸,每个人用一个线程表示,桥为共享资源。在过桥的过程中显示谁在过桥及其走向。