`
ryhome
  • 浏览: 44810 次
  • 性别: 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.5instrument特性, 所以必需用1.5以上的jdk运行

2 如果junit版本是4.x, 需要4.8以上的版本, 而且在设置classpathjmockit.jar的路径要设置在junit.jar. 这样保证使用jmockitrunner加载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 caseteardown方法中

        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();

    }

}

 

 

1
0
分享到:
评论
3 楼 疯狂的草儿 2011-02-01  
lz 在写单元测试的时候
以上的都用上了
2 楼 ryhome 2011-01-22  
jasin2008 写道
lz有没有在eclipse中debug方式来运行


开发时经常debug自己的ut, 使用jmockit也没有问题.
1 楼 jasin2008 2011-01-21  
lz有没有在eclipse中debug方式来运行

相关推荐

    jmockit

    JMockit是一个流行的Java测试工具,它主要用于模拟和断言对象的行为,特别是在进行单元测试时。这个工具使得开发者能够在不修改源代码的情况下,对复杂的依赖关系进行模拟,从而简化测试过程。下面将详细介绍JMockit...

    jmockit jmockit jmockit jmockit

    JMockit是一款强大的Java测试工具,它主要用于模拟和测试Java代码中的依赖,特别是在进行单元测试时。这款开源库使得开发者可以更容易地创建测试桩(stubs)和模拟对象(mocks),无需修改被测试代码,甚至在无法...

    JMockit教程.pdf

    开源社区有许多优秀的Java单元测试框架,JMockit是其中之一。正如其名,在单元测试时,CUT(Code Under Test ,被测试代码)可能会依赖其他代码,可以使用JMockit API来mock被依赖的代码,从而进行隔离测试。 ...

    jmockit-1.6.zip

    《JMockit 1.6:提升JUnit测试的利器》 在软件开发过程中,单元测试是一种重要的质量保证手段,它能够帮助我们确保代码的正确性和稳定性。JUnit作为Java领域广泛使用的单元测试框架,极大地简化了测试工作。然而,...

    jmockit官网文档整理

    在"Mocking.mht"和"Faking(伪实现).mht"这两个文件中,详细地讲解了上述各个知识点的使用方法和示例,通过阅读这些文档,开发者可以深入理解并熟练掌握JMockit的使用技巧,提升单元测试的效率和质量。

    jmockit-1.7.jar

    jmockit-1.7.jar JMockit最新工具包

    jmockit\jmockit-0.999.2.jar

    jmockit-0.999.2.jar

    jmockit-coverage

    《JMockit Coverage:深入解析单元测试覆盖率工具》 在软件开发过程中,单元测试是确保代码质量的关键步骤。而衡量单元测试覆盖率则是评估测试完善度的重要指标。JMockit Coverage,作为一款强大的Java测试覆盖率...

    jmockit-例子和jar.rar

    《JMockit:一个强大的Java测试工具》 在软件开发领域,测试是不可或缺的一部分,它确保了代码的质量和稳定性。JMockit是一个优秀的Java库,专门用于进行单元测试和模拟对象,尤其在处理复杂的依赖关系时表现突出。...

    jmockit中文教程

    ### jmockit中文教程 #### 简介 JMockit是一款用于Java应用程序的高级单元测试框架,它提供了丰富的API来帮助开发者创建高质量的单元测试。JMockit的核心能力在于其能够模拟(Mock)和伪装(Stub)Java类中的方法...

    JMockit教程.zip

    JMockit是一款强大的Java测试工具,它允许开发者在单元测试中模拟任何Java代码,包括静态方法、构造器、final类和方法以及系统类。这款工具的出现极大地简化了Java应用程序的测试过程,尤其是对于那些难以测试或者有...

    JMockit基础教程

    **JMockit基础教程** JMockit是一款强大的Java单元测试框架,它允许开发者模拟复杂的依赖关系,以便在测试中隔离代码。本教程将详细介绍JMockit的基础知识,包括录制期望、执行测试和验证结果。 ### **录制期望** ...

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

    JMockit是一款强大的Java测试工具,它允许开发者模拟和验证对象的行为,特别是在进行单元测试时。这个"2020-11-15 JMockit中文网在github上的示例代码"压缩包包含了JMockit相关的示例代码,旨在帮助初学者更好地理解...

    jmockit使用例子

    JMockit是一款强大的Java测试工具,它允许开发者在单元测试中模拟任何类或接口的行为,包括静态方法和构造函数。这个“jmockit使用例子”很可能会涵盖如何利用JMockit进行测试的基本步骤,以及如何改变静态方法的...

    jmockit-1.2

    **JMockit 1.2:一款强大的Java测试工具** JMockit是一款广泛使用的Java单元测试框架,尤其在模拟和mocking对象方面表现卓越。它提供了简洁、灵活且高效的API,使得开发者能够在测试代码中轻松地模拟任何Java类或...

    Jmockit用法示例

    **Jmockit详解:单元测试中的模拟神器** Jmockit是一款强大的Java库,主要用于单元测试,尤其是模拟(mocking)和验证(verifying)对象的行为。它提供了灵活且易于使用的API,使得测试复杂的代码变得更加简单,...

    jmockit测试例子

    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框架所使用jar包

    jmockit框架所使用jar包,在写单元测试的过程中我们会发现需要测试的类有很多依赖,这些依赖的类或者资源又会有依赖,导致在单元测试代码里无法完成构建,我们应对的方法是Mock。简单的说就是模拟这些需要构建的类...

    JMockit学习分享

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

Global site tag (gtag.js) - Google Analytics