介绍
- 如果针对的是类,那么该类的所有对象都会生效;
- 如果针对的是类的某个对象,那么只有该实例会生效。
示例
被测试类
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
}
}