验证交互行为
Mock对象一旦建立便会自动记录自己的交互行为,所以我们可以有选择地对其交互行为进行验证。在Mockito中验证mock对象交互行为的方法是verify(mock). xxx()。于是用此方法验证了findUserByUserName()方法的调用,因为只调用了一次,所以在verify中我们指定了times参数或atLeastOnce()参数。最后验证返回值是否和预期一样。
Java代码
import org.junit.Test; import org.mockito.Mock; import com.baobaotao.domain.User; import com.baobaotao.service.UserService; import com.baobaotao.service.UserServiceImpl; … public class MockitoSampleTest { …
//① 模拟接口UserService测试 @Test public void testMockInterface() { … when(mockUserService.findUserByUserName("tom")) .thenReturn(new User("tom", "1234")); User user = mockServiceImpl.findUserByUserName("tom");
//①-4 验证返回值 assertNotNull(user); assertEquals(user.getUserName(), "tom"); assertEquals(isMatch, true);
//①-5 验证交互行为 verify(mockUserService).findUserByUserName("tom");
//①-6 验证方法至少调用一次 verify(mockUserService, atLeastOnce()).findUserByUserName("tom"); verify(mockUserService, atLeast(1)).findUserByUserName("tom"); //①-7 验证方法至多调用一次 verify(mockUserService, atMost(1)).findUserByUserName("tom"); } … |
Mockio为我们提供了丰富调用方法次数的验证机制,如被调用了特定次数verify(xxx, times(x))、至少x次verify(xxx, atLeast (x))、最多x次verify(xxx, atMost (x))、从未被调用verify(xxx, never())。在①-6处,验证findUserByUserName()方法至少被调用一次。在①-7处,验证findUserByUserName()方法至多被调用一次。