前言
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的操作:
1.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();
}
}
2.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学习分享 #### 一、引言 在软件开发过程中,单元测试作为确保代码质量的关键步骤之一,其重要性不言而喻。而在众多单元测试技术中,mock技术因其能有效解决单元间耦合导致的测试难题而备受青睐。本文将...
《JMockit:一个强大的Java测试工具》 在软件开发领域,测试是不可或缺的一...通过学习和掌握JMockit,开发者可以更高效、更全面地进行单元测试,提高代码质量,减少bug的出现,从而提升整个项目的稳定性和可靠性。
JMockit是一款强大的Java...通过深入学习JMockit教程.pdf,你将能够熟练掌握这个工具,提升你的Java测试技能,为你的项目提供更高质量的保证。记住,良好的测试是软件质量的重要保障,也是持续集成和持续交付的基础。
通过学习和实践这个压缩包中的示例代码,你将能深入了解JMockit的功能和用法,提升你的Java单元测试技能。记得,理论知识与实践相结合是掌握技术的关键,不断练习和应用这些示例,你将能够在实际工作中更加自如地...
学习和理解JMockit的使用,可以帮助我们编写更健壮、更易于维护的测试,提升整体项目质量。通过阅读和分析`MockTest`中的代码,我们可以深入了解JMockit的各种特性和用法,从而更好地在自己的项目中应用。
《Jmockit in Action》是关于...通过深入学习和实践,开发者可以充分利用Jmockit提高测试效率,保证代码质量,降低维护成本。对于从事Java开发特别是关注测试领域的工程师来说,掌握Jmockit是提升测试能力的重要一环。
在标签中,“系统开源”表明JMockit是一个开放源代码项目,这意味着它的源代码可供任何人查看、学习和贡献。开源社区的参与使得JMockit得以不断进化和完善,同时也鼓励了用户之间的知识分享和协同开发。 压缩包文件...
5. **开源软件**:开源项目意味着源代码公开,开发者可以自由地查看和修改代码,这对于学习新技术、贡献代码和社区合作非常重要。这种透明度也增强了软件的信任度和可靠性。 综上所述,这些压缩包涉及到了Java开发...
它强调约定优于配置,降低了学习曲线,并提高了开发效率。 接着,我们要引入JDK 17。JDK 17是Java的一个长期支持(LTS)版本,提供了许多性能优化和新的特性,例如文本块(Text Blocks),密封类(Sealed Classes)...
本资源包含了四个不同模拟框架的源码:Easymock、JMockit、Mockito和PowerMock,这些都是Java语言中广受欢迎的单元测试工具。下面将对这四个框架进行详细介绍。 1. **Easymock**: Easymock是一个简单的模拟框架,...
在学习和使用这些工具时,阅读提供的文档非常重要。`EasyMock`的文档会讲解如何创建和配置mock对象,以及如何执行和验证预期的行为。`PowerMock`的文档则会详细介绍如何利用其扩展的功能进行更复杂的模拟。通过深入...
基于Spring框架的计数器与整数运算系统 内容概要 本项目是一个基于Spring框架的Web应用,主要... 单元测试项目中的单元测试示例展示了如何使用JUnit和JMockit进行单元测试,帮助开发者理解如何编写和运行单元测试。
此外,单元测试框架如JMockit,也利用ASM来模拟类的行为。学习ASM可以让你更好地实现这些高级特性,甚至自定义自己的字节码工具。 在实践中,开发者可以通过ASM进行以下操作: 1. 动态生成类:在运行时根据需求创建...
JMock 的源码是开源的,通过阅读源码,我们可以更深入地了解其内部工作机制,这对于学习和调试 JMock 有很大帮助。 至于 "工具",可能指的是在开发过程中使用的其他辅助工具,如 IDE 插件、构建工具或代码分析工具...
“工具”可能指的是用于辅助测试的各种Java工具和库,如Mockito用于模拟对象,JMockit用于无侵入式模拟,或者使用Apache Maven或Gradle构建工具中的插件进行自动化测试和报告生成。此外,持续集成工具如Jenkins、...
PowerMock与其他Mocking工具(如Mockito、JMockit)相比,它的优势在于能够处理更多复杂的模拟场景,但也因为其强大的能力,学习曲线相对较陡峭。在选择Mocking工具时,应根据项目的实际需求和团队的熟悉程度来决定...
10. **JMockit**或**EasyMock**: 这些是其他模拟框架,允许在不修改源代码的情况下模拟复杂的交互。 通过"Java_Jelena_Usc_Soft-Test-main"这个文件名,我们可以猜测这可能包含了一个主程序或者主目录,其中可能...
- **JMockit**:除了模拟,还支持模拟静态方法和final类,功能强大但使用相对复杂。 4. **使用Mockito进行模拟测试** Mockito的使用通常包括以下步骤: - **引入Mockito库**:在项目中添加Mockito依赖。 - **...
尽管【描述】中提到"这个项目是多余的",这可能意味着在当前的软件开发环境下,可能有其他更流行或者更成熟的替代品,如Mockito、JMockit等,但 ContestJ的出现无疑为Java开发者提供了一种新的选择,尤其是对于那些...