Mockito 注解使用
Mockito简介
Mockito 是 Google 实现的测试框架, 语法跟EasyMock很像, 但从语法来看, Mockito更加简洁. 这是官网EasyMock和Mockito的对比
Mockito的所有功能都在Mockito这个类中,里面的函数按功能可分为几类:
-
参数匹配 — 就是Matchers里的那些any开头的函数
-
Mock
-
打桩(stub)功能 — 就是那些do什么开头的函数
-
验证模型 verify, 包括atLeast,atLeastOnce,atMost,only,times
Mockito注解使用
支持注解:
- @Mock
代替mock(xxx.class), 代码精简
- @Spy
可以监视真实对象, 只mock想要打桩的方法
- @Captor
参数捕获器, 用于获取mock方法内部的对象, 进行验证使用
- @InjectMocks
主动将已存在的mock对象注入到bean中, 按名称注入, 但注入失败不会抛出异常
示例代码:
public class JackBoltTest {
@InjectMocks
private JackBolt jackBolt = new JackBolt();
@Captor
private ArgumentCaptor<Values> valuesCaptor;
@Mock
private Tuple tuple;
@Mock
private BasicOutputCollector basicOutputCollector;
@BeforeMethod
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this); //需要将注解进行初始化
when(tuple.getFields()).thenReturn(new Fields());
}
@Test(description = "这里是描述")
public void testExecute() {
when(tuple.getValue(0)).thenReturn("你想要的值");
analyzeBolt.execute(tuple, basicOutputCollector);
verify(basicOutputCollector, times(1)).emit(valuesCaptor.capture());//可以捕获用于发送的values对象
Values value = valuesCaptor.getValue(); //进行校验
assertEquals(value.get(0), "2");
assertEquals(value.get(4), 1);
}
}
关于@spy的示例代码
@Test
public void spyTest2() {
List list = new LinkedList();
List spy = spy(list);
//optionally, you can stub out some methods:
when(spy.size()).thenReturn(100);
//using the spy calls real methods
spy.add("one");
spy.add("two");
//prints "one" - the first element of a list
System.out.println(spy.get(0));
//size() method was stubbed - 100 is printed
System.out.println(spy.size());
//optionally, you can verify
verify(spy).add("one");
verify(spy).add("two");
}