前言
Jmockit是一个超强大的ut mock工具, 与其他mock工具最大的特点是可以对final类, 静态方法进行mock! 这是其他mock工具不可比的. 这也成为我们选它做ut的原因. 多种mock工具特色比较:
http://code.google.com/p/jmockit/wiki/MockingToolkitComparisonMatrix
一 jmockit加载注意事项
1 由于jmockit用到了jdk1.5的instrument特性, 所以必需用1.5以上的jdk运行
2 如果junit版本是4.x, 需要4.8以上的版本, 而且在设置classpath时jmockit.jar的路径要设置在junit.jar前. 这样保证使用jmockit的runner加载junit
3 jmockit还自带了ut覆盖率统计工具, 将jmockit-coverage.jar的路径加入classpath, 每次ut完成就会自动生成覆盖率报告, 方便省心.
二 jmockit实用技巧之MockUp类应用
Jmockit提供了多种mock方式共开发者使用, 但给我感觉最有用的一个类就是MockUp. 用它几乎能完成所有需要mock的操作:
<!--[if !supportLists]-->a)
<!--[endif]-->mock接口. 使用MockUp.getMockInstance()方便mock接口, 特别是定义了多个方法的接口. 手工打桩需要写一个此接口的假实现, 但测试中只调用了接口的一个方法, 造成了其他没调用方法还要写一堆没用的实现. 用了MockUp打桩就只关注需要mock的方法即可:
package
demo.jmockit;
public interface IService {
void doSth();
void doOtherthing();
}
|
接口中有两个方法, 使用Mock返回一个mock对象时只关注被调用的方法doSth()即可:
package
demo.jmockit;
import
mockit.Mock;
import
mockit.MockUp;
import
mockit.Mockit;
import
org.junit.Test;
public class TestCase {
@Test
public void testSth() throws Exception {
IService service = new MockUp<IService>() {
// 需要mock哪个方法就只写哪个方法的mock实现, 其他方法都可以忽略
@Mock
public void doSth() {
System.out.println("this is mock implement");
}
}.getMockInstance();
// 调用mock方法
service.doSth();
// 最后做还原动作, 确保用例之间不相互影响. 也可以放到test case的teardown方法中
Mockit.tearDownMocks();
}
}
|
<!--[if !supportLists]-->b)
<!--[endif]-->mock final类或静态方法. 对于final类或静态方法, 其他mock工具基本没有好的办法, 但用MockUp就非常简单:
package
demo.jmockit;
public class Utils {
public static String getFormatStr()throws Exception{
return "YYYY-mm-dd HH:MM:SS";
}
}
|
package
demo.jmockit;
import
mockit.Mock;
import
mockit.MockUp;
import
mockit.Mockit;
import
org.junit.After;
import
org.junit.Test;
public class TestCase {
@Test
public void testMockStaticMethod() {
// 打印mock前返回值
System.out.println(Utils.getFormatStr());
new MockUp<Utils>() {
//除了static关键字, 其他方法定义内容保持与被mock方法一致(包括异常定义)
@Mock
public String getFormatStr() throws Exception {
return "OtherFormat: dd-mm-YYYY";
}
};
// 打印mock后返回值
System.out.println(Utils.getFormatStr());
}
@After
public void tearDown() {
// 最后做还原动作, 确保用例之间不相互影响.
Mockit.tearDownMocks();
}
}
|
分享到:
相关推荐
jmockit jmockit jmockit jmockit jmockit jmockit
jmockit
开源社区有许多优秀的Java单元测试框架,JMockit是其中之一。正如其名,在单元测试时,CUT(Code Under Test ,被测试代码)可能会依赖其他代码,可以使用JMockit API来mock被依赖的代码,从而进行隔离测试。 ...
jmockit中文教程
jmockit-1.7.jar JMockit最新工具包
JMockit 是一款 Java 语言的测试框架,主要用于模拟(mocking)和验证对象的行为,以便在单元测试中隔离被测试代码。它支持行为和状态的测试,这使得测试更加灵活和全面。以下是对 JMockit 的关键知识点的详细解释:...
jmockit-0.999.2.jar
jmockit-coverage
JMockit教程.zip
jmockit-例子和jar.rar
jmockit-1.2
Junit用的测试jar包可以测试private等方法
Mockup always comes to us when we try to ... Now, jmockit comes to us. "Tests can easily be written that will mock final classes, static methods, constructors, and so on. There are no limitations.
jmockit使用例子,包括两种调用方式,可以改变静态方法
jmockit框架所使用jar包,在写单元测试的过程中我们会发现需要测试的类有很多依赖,这些依赖的类或者资源又会有依赖,导致在单元测试代码里无法完成构建,我们应对的方法是Mock。简单的说就是模拟这些需要构建的类...
jmockit jar包
2020-11-15 JMockit中文网在github上的示例代码,欢迎想学习JMockit的同学下载! 如果该资源违反网站相关规定请告知
NULL 博文链接:https://uodut.iteye.com/blog/2323559
JMockit基础教程 录制期望(创建依赖Mock、方法调用、参数返回值、次数等) 执行测试(创建测试对象、执行待测试方法) 验证结果(结果验证如返回值;交互验证如方法调用次数,顺序)
可以用来Mock JAVA代码中的静态方法