JMockit:Expectations 生效范围


#Java Jmockit#


介绍

  • 如果针对的是类,那么该类的所有对象都会生效;
  • 如果针对的是类的某个对象,那么只有该实例会生效。

示例

被测试类

package demo;

public class Calculator {

    // 非静态函数
    public int add(int a, int b) {
        return a+b;
    }

    // 静态函数
    public static int staticAdd(int a, int b) {
        return a+b;
    }

    // 空函数
    public void noop() {
        System.out.println("没有被 mock");
    }

}

测试:对类的所有对象生效

package demo;

import mockit.Expectations;
import org.junit.Test;

public class CalculatorTest {

    @Test
    public void test_add_01() {
        Calculator calculator = new Calculator();
        new Expectations(Calculator.class) {{  // 对 Calculator 类的所有对象均生效
            calculator.add(anyInt, anyInt);
            result = 1;
        }};

        System.out.println(calculator.add(1, 2)); // 1
        System.out.println(calculator.add(2, 2)); // 1
        // 如果新建一个对象,结果会是?
        System.out.println(new Calculator().add(2, 2)); // 仍然输出 1
    }
}

测试:对类的某个对象

package demo;

import mockit.Expectations;
import org.junit.Test;

public class CalculatorTest {

    @Test
    public void test_add_01() {
        Calculator calculator = new Calculator();
        new Expectations(calculator) {{  // 仅对 calculator 对象生效
            calculator.add(anyInt, anyInt);
            result = 1;
        }};

        System.out.println(calculator.add(1, 2)); // 1
        System.out.println(calculator.add(2, 2)); // 1
        // 如果新建一个对象,结果会是?
        System.out.println(new Calculator().add(2, 2)); // 不会生效,输出 4
    }
}

测试:不同的对象进行不同的 mock

package demo;

import mockit.Expectations;
import org.junit.Test;

public class CalculatorTest {

    @Test
    public void test_add_01() {
        Calculator calculator = new Calculator();
        Calculator calculator2 = new Calculator();
        new Expectations(calculator, calculator2) {{  // 对 calculator、calculator2 对象生效
            calculator.add(anyInt, anyInt);
            result = 1;
            calculator2.add(anyInt, anyInt);
            result = 100;
        }};

        System.out.println(calculator.add(1, 2)); // 1
        System.out.println(calculator.add(2, 2)); // 1
        System.out.println(calculator2.add(2, 2)); // 100
        System.out.println(calculator.add(1, 2)); // 1
    }

}

( 本文完 )