示例
要测试的类
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");
}
}
测试:mock 非静态函数返回值
package demo;
import mockit.Mock;
import mockit.MockUp;
import org.junit.Test;
public class CalculatorTest {
@Test
public void test_add_01() {
System.out.println("--test_add_01--");
Calculator calculator = new Calculator();
System.out.println("mock 之前");
System.out.println(calculator.add(1, 2));
// mock
MockUp<Calculator> mock = new MockUp<Calculator>() {
@Mock
public int add(int a, int b) {
return -1;
}
};
System.out.println("mock 之后");
System.out.println(calculator.add(1, 2));
}
@Test
public void test_add_02() {
System.out.println("--test_add_02--");
Calculator calculator = new Calculator();
System.out.println(calculator.add(1, 2));
}
}
单测执行结果:
--test_add_01--
mock 之前
3
mock 之后
-1
--test_add_02--
3
测试:mock 静态函数返回值
和 非静态函数一样,但在 MockUp 中不要加 static 关键词。
package demo;
import mockit.Mock;
import mockit.MockUp;
import org.junit.Test;
public class CalculatorTest {
@Test
public void test_staticAdd_01() {
System.out.println("--test_add_01--");
System.out.println("mock 之前");
System.out.println(Calculator.staticAdd(1, 2));
// mock
new MockUp<Calculator>() {
@Mock
public int staticAdd(int a, int b) {
return -1;
}
};
System.out.println("mock 之后");
System.out.println(Calculator.staticAdd(1, 2));
}
@Test
public void test_staticAdd_02() {
System.out.println("--test_add_02--");
System.out.println(Calculator.staticAdd(1, 2));
}
}
执行结果:
--test_staticAdd_01--
mock 之前
3
mock 之后
-1
--test_staticAdd_02--
3
测试:一个单测内多次 mock
package demo;
import mockit.Mock;
import mockit.MockUp;
import org.junit.Test;
public class CalculatorTest {
@Test
public void test_add_01() {
Calculator calculator = new Calculator();
System.out.println("mock 之前");
System.out.println(calculator.add(1, 2));
// mock
new MockUp<Calculator>() {
@Mock
public int add(int a, int b) {
return -1;
}
};
System.out.println("mock 之后");
System.out.println(calculator.add(1, 2));
// 再次 mock
new MockUp<Calculator>() {
@Mock
public int add(int a, int b) {
return -100;
}
};
System.out.println("再次 mock 之后");
System.out.println(calculator.add(1, 2));
}
}
执行结果:
mock 之前
3
mock 之后
-1
再次 mock 之后
-100
测试:mock 无参函数
package demo;
import mockit.Mock;
import mockit.MockUp;
import org.junit.Test;
public class CalculatorTest {
@Test
public void test_noop_01() {
System.out.println("--test_noop_01--");
System.out.println("mock 之前");
Calculator calculator = new Calculator();
calculator.noop();
// mock
new MockUp<Calculator>() {
@Mock
public void noop() {
System.out.println("被 mock 了");
}
};
System.out.println("mock 之后");
calculator.noop();
}
@Test
public void test_noop_02() {
System.out.println("--test_noop_02--");
Calculator calculator = new Calculator();
calculator.noop();
}
}
执行结果:
--test_noop_01--
mock 之前
什么都不做
mock 之后
被 mock 了
--test_noop_02--
什么都不做
测试:mock 抛出异常
package demo;
import mockit.Mock;
import mockit.MockUp;
import org.junit.Test;
public class CalculatorTest {
@Test
public void test_noop_01() {
System.out.println("--test_noop_01--");
System.out.println("mock 之前");
Calculator calculator = new Calculator();
calculator.noop();
// mock
new MockUp<Calculator>() {
@Mock
public void noop() {
throw new RuntimeException("xxx");
}
};
System.out.println("mock 之后");
calculator.noop();
}
}
执行结果:
--test_noop_01--
mock 之前
没有被 mock
mock 之后
xxx
java.lang.RuntimeException: xxx
at demo.CalculatorTest$1.noop(CalculatorTest.java:20)
at demo.CalculatorTest.test_noop_01(CalculatorTest.java:25)
at java.base/java.lang.Thread.run(Thread.java:829)
测试:特定情况下调用原始逻辑
package demo;
import mockit.Invocation;
import mockit.Mock;
import mockit.MockUp;
import org.junit.Test;
public class CalculatorTest {
@Test
public void test_add_01() {
Calculator calculator = new Calculator();
// mock
new MockUp<Calculator>() {
@Mock
public int add(Invocation invocation, int a, int b) {
// 当 a == 1 时,调用原始逻辑
if (a == 1) {
return invocation.proceed(a, b);
}
return 1;
}
};
System.out.println(calculator.add(1, 2));
System.out.println(calculator.add(2, 1));
}
}
执行结果:
3
1