介绍
使用 Expectations 录制函数行为,然后通过实际的单测逻辑重放录制的函数行为。
result 若出现多次,则根据调用顺序返回不同的值。returns 函数也可以用来设置多个返回值。
示例
被测试类
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() {
new Expectations(Calculator.class) {{
Calculator.staticAdd(1, 2); result = 1;
}};
System.out.println(Calculator.staticAdd(1, 2));
System.out.println(Calculator.staticAdd(1, 2));
}
}
执行结果:
1
1
示例:通过多次设置 result 的值,让同一函数每次返回的结果不一样
package demo;
import mockit.Expectations;
import org.junit.Test;
public class CalculatorTest {
@Test
public void test_add_01() {
new Expectations(Calculator.class) {{
Calculator.staticAdd(1, 2);
result = 1; // 第1次调用时返回1
result = 2; // 第2次,以及之后的调用返回1
}};
System.out.println(Calculator.staticAdd(1, 2));
System.out.println(Calculator.staticAdd(1, 2));
System.out.println(Calculator.staticAdd(1, 2));
}
}
执行结果:
1
2
2
示例:通过设置 result 的值为数组,让同一函数每次返回的结果不一样
package demo;
import mockit.Expectations;
import org.junit.Test;
public class CalculatorTest {
@Test
public void test_add_01() {
new Expectations(Calculator.class) {{
Calculator.staticAdd(1, 2);
result = new int[] {1, 2};
}};
System.out.println(Calculator.staticAdd(1, 2));
System.out.println(Calculator.staticAdd(1, 2));
System.out.println(Calculator.staticAdd(1, 2));
}
}
当有多个返回值时,可以用 returns 函数替代 result。
下面的代码和上面的代码效果相同:
package demo;
import mockit.Expectations;
import org.junit.Test;
public class CalculatorTest {
@Test
public void test_add_01() {
new Expectations(Calculator.class) {{
Calculator.staticAdd(1, 2);
returns(1, 2);
}};
System.out.println(Calculator.staticAdd(1, 2));
System.out.println(Calculator.staticAdd(1, 2));
System.out.println(Calculator.staticAdd(1, 2));
}
}
示例:result 和 returns 混用,让同一函数每次返回的结果不一样
package demo;
import mockit.Expectations;
import org.junit.Test;
public class CalculatorTest {
@Test
public void test_add_01() {
new Expectations(Calculator.class) {{
Calculator.staticAdd(1, 2);
returns(1, 2);
result = 100;
}};
System.out.println(Calculator.staticAdd(1, 2));
System.out.println(Calculator.staticAdd(1, 2));
System.out.println(Calculator.staticAdd(1, 2));
System.out.println(Calculator.staticAdd(1, 2));
}
}
执行结果:
1
2
100
100
如果一个函数被录制多次,会怎么样?
以最后一次录制为准。
示例代码:
package demo;
import mockit.Expectations;
import org.junit.Test;
public class CalculatorTest {
@Test
public void test_add_01() {
new Expectations(Calculator.class) {{
Calculator.staticAdd(1, 2); // 第1次录制
result = 1;
Calculator.staticAdd(1, 2); // 第2次录制
result = 100;
}};
System.out.println(Calculator.staticAdd(1, 2));
System.out.println(Calculator.staticAdd(1, 2));
System.out.println(Calculator.staticAdd(1, 2));
System.out.println(Calculator.staticAdd(1, 2));
}
}
执行结果:
100
100
100
100