`
yanghongxia9
  • 浏览: 115822 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Jmockit学习

 
阅读更多
前言
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学习分享

    ### JMockit学习分享 #### 一、引言 在软件开发过程中,单元测试作为确保代码质量的关键步骤之一,其重要性不言而喻。而在众多单元测试技术中,mock技术因其能有效解决单元间耦合导致的测试难题而备受青睐。本文将...

    jmockit-例子和jar.rar

    《JMockit:一个强大的Java测试工具》 在软件开发领域,测试是不可或缺的一...通过学习和掌握JMockit,开发者可以更高效、更全面地进行单元测试,提高代码质量,减少bug的出现,从而提升整个项目的稳定性和可靠性。

    JMockit教程.zip

    JMockit是一款强大的Java...通过深入学习JMockit教程.pdf,你将能够熟练掌握这个工具,提升你的Java测试技能,为你的项目提供更高质量的保证。记住,良好的测试是软件质量的重要保障,也是持续集成和持续交付的基础。

    2020-11-15 JMockit中文网在github上的示例代码|jmockit_cn.zip

    通过学习和实践这个压缩包中的示例代码,你将能深入了解JMockit的功能和用法,提升你的Java单元测试技能。记得,理论知识与实践相结合是掌握技术的关键,不断练习和应用这些示例,你将能够在实际工作中更加自如地...

    jmockit使用例子

    学习和理解JMockit的使用,可以帮助我们编写更健壮、更易于维护的测试,提升整体项目质量。通过阅读和分析`MockTest`中的代码,我们可以深入了解JMockit的各种特性和用法,从而更好地在自己的项目中应用。

    Jmockit in Action

    《Jmockit in Action》是关于...通过深入学习和实践,开发者可以充分利用Jmockit提高测试效率,保证代码质量,降低维护成本。对于从事Java开发特别是关注测试领域的工程师来说,掌握Jmockit是提升测试能力的重要一环。

    jmockit.cn:JMockit中文网(jmockit.cn)上所有大约的测试示例源代码

    在标签中,“系统开源”表明JMockit是一个开放源代码项目,这意味着它的源代码可供任何人查看、学习和贡献。开源社区的参与使得JMockit得以不断进化和完善,同时也鼓励了用户之间的知识分享和协同开发。 压缩包文件...

    merge-jmockit-maven-plugin-0.999.25.zip

    5. **开源软件**:开源项目意味着源代码公开,开发者可以自由地查看和修改代码,这对于学习新技术、贡献代码和社区合作非常重要。这种透明度也增强了软件的信任度和可靠性。 综上所述,这些压缩包涉及到了Java开发...

    Springboot 3中,使用jacoco插件生成单元测试覆盖率报告

    它强调约定优于配置,降低了学习曲线,并提高了开发效率。 接着,我们要引入JDK 17。JDK 17是Java的一个长期支持(LTS)版本,提供了许多性能优化和新的特性,例如文本块(Text Blocks),密封类(Sealed Classes)...

    此资源包含4种mock源码

    本资源包含了四个不同模拟框架的源码:Easymock、JMockit、Mockito和PowerMock,这些都是Java语言中广受欢迎的单元测试工具。下面将对这四个框架进行详细介绍。 1. **Easymock**: Easymock是一个简单的模拟框架,...

    PowerMock\EasyMock的相关资料和文档

    在学习和使用这些工具时,阅读提供的文档非常重要。`EasyMock`的文档会讲解如何创建和配置mock对象,以及如何执行和验证预期的行为。`PowerMock`的文档则会详细介绍如何利用其扩展的功能进行更复杂的模拟。通过深入...

    基于Spring框架的计数器与整数运算系统.zip

    基于Spring框架的计数器与整数运算系统 内容概要 本项目是一个基于Spring框架的Web应用,主要... 单元测试项目中的单元测试示例展示了如何使用JUnit和JMockit进行单元测试,帮助开发者理解如何编写和运行单元测试。

    asm5.1源码和jar

    此外,单元测试框架如JMockit,也利用ASM来模拟类的行为。学习ASM可以让你更好地实现这些高级特性,甚至自定义自己的字节码工具。 在实践中,开发者可以通过ASM进行以下操作: 1. 动态生成类:在运行时根据需求创建...

    maven+jmock

    JMock 的源码是开源的,通过阅读源码,我们可以更深入地了解其内部工作机制,这对于学习和调试 JMock 有很大帮助。 至于 "工具",可能指的是在开发过程中使用的其他辅助工具,如 IDE 插件、构建工具或代码分析工具...

    java 测试

    “工具”可能指的是用于辅助测试的各种Java工具和库,如Mockito用于模拟对象,JMockit用于无侵入式模拟,或者使用Apache Maven或Gradle构建工具中的插件进行自动化测试和报告生成。此外,持续集成工具如Jenkins、...

    powermock实战手册

    PowerMock与其他Mocking工具(如Mockito、JMockit)相比,它的优势在于能够处理更多复杂的模拟场景,但也因为其强大的能力,学习曲线相对较陡峭。在选择Mocking工具时,应根据项目的实际需求和团队的熟悉程度来决定...

    Java_Jelena_Usc_Soft-Test:用于研究

    10. **JMockit**或**EasyMock**: 这些是其他模拟框架,允许在不修改源代码的情况下模拟复杂的交互。 通过"Java_Jelena_Usc_Soft-Test-main"这个文件名,我们可以猜测这可能包含了一个主程序或者主目录,其中可能...

    MocksEmJava:Alura-Java的模拟玩法:Testes de comportamentos automatizados

    - **JMockit**:除了模拟,还支持模拟静态方法和final类,功能强大但使用相对复杂。 4. **使用Mockito进行模拟测试** Mockito的使用通常包括以下步骤: - **引入Mockito库**:在项目中添加Mockito依赖。 - **...

    contestJ-开源

    尽管【描述】中提到"这个项目是多余的",这可能意味着在当前的软件开发环境下,可能有其他更流行或者更成熟的替代品,如Mockito、JMockit等,但 ContestJ的出现无疑为Java开发者提供了一种新的选择,尤其是对于那些...

Global site tag (gtag.js) - Google Analytics