示例
被测试类:
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");
}
}
捕获 add 方法的参数
package demo;
import mockit.Expectations;
import mockit.Verifications;
import org.junit.Assert;
import org.junit.Test;
public class CalculatorTest {
@Test
public void test_add_01() {
Calculator calculator = new Calculator();
// 录制
new Expectations(calculator) {{
calculator.add(anyInt, anyInt);
result = 1;
}};
// 执行
int addResult = calculator.add(10, 11);
Assert.assertEquals(1, addResult);
// 验证
new Verifications() {{
int a;
int b;
calculator.add(a = withCapture(), b = withCapture());
System.out.printf("捕获参数结果: a=%s, b=%s\n", a, b);
}};
}
}
执行结果:
捕获参数结果: a=10, b=11
若被录制的函数执行多次,则捕获的是最后一次的参数
package demo;
import mockit.Expectations;
import mockit.Verifications;
import org.junit.Assert;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
public class CalculatorTest {
@Test
public void test_add_01() {
Calculator calculator = new Calculator();
// 录制
new Expectations(calculator) {{
calculator.add(anyInt, anyInt);
result = 1;
}};
// 执行
int addResult = calculator.add(10, 11);
Assert.assertEquals(1, addResult);
addResult = calculator.add(110, 111);
Assert.assertEquals(1, addResult);
// 验证
new Verifications() {{
int a;
int b;
calculator.add(a = withCapture(), b = withCapture());
System.out.printf("捕获参数结果: a=%s, b=%s\n", a, b);
}};
}
}
执行结果:
捕获参数结果: a=110, b=111
捕获所有执行过的参数
package demo;
import mockit.Expectations;
import mockit.Verifications;
import org.junit.Assert;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
public class CalculatorTest {
@Test
public void test_add_01() {
Calculator calculator = new Calculator();
// 录制
new Expectations(calculator) {{
calculator.add(anyInt, anyInt);
result = 1;
}};
// 执行
int addResult = calculator.add(10, 11);
Assert.assertEquals(1, addResult);
addResult = calculator.add(110, 111);
Assert.assertEquals(1, addResult);
// 验证
new Verifications() {{
List<Integer> a = new ArrayList<>();
List<Integer> b = new ArrayList<>();
calculator.add(withCapture(a), withCapture(b));
System.out.printf("捕获参数结果: a=%s, b=%s\n", a, b);
}};
}
}
执行结果:
捕获参数结果: a=[10, 110], b=[11, 111]