jmockit 中文网 构造函数中文代码块

有时候,有些编写不良好的类的构造函数,初始代码块,静态代码块存在大量的初始化逻辑,初始化会报错。

比如,有些类初始化的时候就去连结DB,连不上就报错。这很影响我们的测试程序的运行。

此时,我们需要把这些初始化逻辑Mock掉。用我们的Mock逻辑替代。要Mock这些初始化代码,很简单。见如下的例子:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

//一个包含初始代码块的普通类 

public class AnOrdinaryClassWithBlock {

    private int i;

    public static int j;

    // 初始代码块

    {

        i = 1;

    }

    // 静态初始代码块

    static {

        j = 2;

    }

    // 构造函数

    public AnOrdinaryClassWithBlock(int i) {

        this.i = i;

    }

 

    public int getI() {

        return i;

    }

    public void setI(int i) {

        this.i = i;

    }

}


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

//Mock构造函数&初始代码块

public class ConstructorAndBlockMockingTest {

    // AnOrdinaryClassWithBlock的MockUp类,继承MockUp即可

    public static class AnOrdinaryClassWithBlockMockUp extends MockUp<AnOrdinaryClassWithBlock> {

        // Mock构造函数和初始代码块, 函数名$init就代表类的构造函数

        @Mock

        public void $init(int i) {

        }

        // Mock静态初始代码块,, 函数名$init就代表类的静态代码块

        @Mock

        public void $clinit() {

        }

    }

    @Test

    public void testClassMockingByMockUp() {

        new AnOrdinaryClassWithBlockMockUp();

        AnOrdinaryClassWithBlock instance = new AnOrdinaryClassWithBlock(10);

        // 静态初始代码块被mock了

        Assert.assertTrue(AnOrdinaryClassWithBlock.j == 0);

        // 构造函数和初始代码块被mock

        Assert.assertTrue(instance.getI() == 0);

    }

}

 

原文地址:https://www.cnblogs.com/funkboy/p/12012563.html

时间: 2024-11-13 07:53:18

jmockit 中文网 构造函数中文代码块的相关文章

构造函数(构造代码块)

1 /* 2 对象一建立就会调用与之对应的构造函数 3 4 构造函数的作用:可以用于对象的初始化 5 */ 6 /* 7 构造代码块 8 */ 9 10 //目标 构造代码块位置改变是否每次执行都会初始化对象(是) 构造函数能否重载 11 /* 12 执行顺序:对象创建-->类加载-->静态加载(成员函数,变量)-->构造函数-->在调用方法时执行构造代码块 13 */ 14 class Persion 15 { 16 private int age; 17 private Str

JAVA之父子类的构造函数、静态代码块等执行顺序

欢迎转载,请附出处: http://blog.csdn.net/as02446418/article/details/47092769 最近在做项目时遇到了Java构造函数,代码块的一些执行顺序方面的知识,随兴做了个实验,毕竟实践出真知嘛.遇到的问题简单说一下就是在子类A继承父类B的时候,如果在代码中 A a = new A(); 这个时候父类和子类的静态代码块和构造函数执行的先后顺序到底是怎么样的呢? 我得出的结论是 父类B静态代码块->子类A静态代码块->父类B非静态代码块->父类B

Java中静态代码块、构造代码块、构造函数、普通代码块(转载)

转载自:http://www.cnblogs.com/ysocean/p/8194428.html 目录 1.静态代码块 ①.格式 ②.执行时机 ③.静态代码块的作用 ④.静态代码块不能存在任何方法体中 ⑤.静态代码块不能访问普通变量 2.构造代码块 ①.格式 ②.执行时机 ③.构造代码块的作用 3.构造函数 4.普通代码块 5.执行顺序 6.父类和子类执行顺序 在Java中,静态代码块.构造代码块.构造函数.普通代码块的执行顺序是一个笔试的考点,通过这篇文章希望大家能彻底了解它们之间的执行顺序

静态代码块、构造代码块、构造函数以及Java类初始化顺序

静态代码块:用staitc声明,jvm加载类时执行,仅执行一次构造代码块:类中直接用{}定义,每一次创建对象时执行.执行顺序优先级:静态块,main(),构造块,构造方法. 构造函数 public HelloA(){//构造函数 } 关于构造函数,以下几点要注意:1.对象一建立,就会调用与之相应的构造函数,也就是说,不建立对象,构造函数时不会运行的.2.构造函数的作用是用于给对象进行初始化.3.一个对象建立,构造函数只运行一次,而一般方法可以被该对象调用多次. 构造代码块 {//构造代码块 }

java中的静态代码块,构造代码块,构造函数,普通代码块

java中的静态代码块,构造代码块,构造函数,普通代码块 静态代码块: 格式: public class Test1{ static{ System.out.println("这是一个静态代码块");  } } 说明: 1.静态代码块在类加载时也就是项目启动时运行并且只运行一次相当于main函数,有多个静态代码块从上往下依次执行,他是一种主动运行的机制. 2.静态代码块不能存在于任何方法中 构造代码块 格式: public class Test2{ { System.out.print

Java静态代码块、代码块及构造函数执行顺序

根据以下程序进行分析 定义一个父类 package sas.LearnJava; public class ExcuteOrderTest { { System.out.println("我是在父类开始的普通代码块!"); } public ExcuteOrderTest() { System.out.println("我是父类的无参构造函数!"); } public void showSomething() { System.out.println("我

08 java代码块的概述和分类

08.01_面向对象(代码块的概述和分类) A:代码块概述 在Java中,使用{}括起来的代码被称为代码块. B:代码块分类 根据其位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块,同步代码块(多线程讲解). 局部代码块:只要是和局部有关系的,都是和方法有关系的 局部变量:在方法声明上或者在方法内部 构造代码块与类变量谁在前先加载谁 ,所有静态的东西(静态方法和静态变量都是)只加载一次,就是在类文件加载的时候加载,类文件释放的时候释放,加载顺序为,静态,–>–>构造代码块或局部变量

java基础复习一、代码块执行顺序

1 /** 2 * 代码块执行顺序的测试 3 * 执行顺序 静态代码块>main代码块>构造代码块>构造函数>普通代码块 4 * @author Administrator 5 * 6 */ 7 public class ClassDemo01 { 8 static { 9 System.out.println("这是一个静态代码块"); 10 } 11 { 12 System.out.println("这是一个构造代码块"); 13 } 1

Java-静态代码块

Java-静态代码块 一 特点: 1,随着类的加载而执行(载入内存),只执行一次,优先于主函数执行 2,用于给类进行初始化 3,只能访问静态成员 4,但是构造代码块可以使用非静态成员变量 二 静态代码块格式: static { 代码 } class StaticCode { static { 语句 } } 三 两个执行顺序的问题 静态代码块,构造代码块,构造函数 静态代码块 版权声明:欢迎交流,QQ872785786