Java mockito单元测试实现过程解析
作者:BigOrang
这篇文章主要介绍了Java mockito单元测试实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
待测试的服务接口:
public interface ItemService {
  String getItemNameUpperCase(String itemId);
}
预览
待测试的服务的实现类:
@Service
public class ItemServiceImpl implements ItemService {
  @Resource
  private ItemRepository itemRepository;
  @Override
  public String getItemNameUpperCase(String itemId) {
    Item item = itemRepository.findById(itemId);
    if (item == null) {
      return null;
    }
    return item.getName().toUpperCase();
  }
}
// 测试用例
import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.*;
public class ItemServiceTest {
  @Mock
  private ItemRepository itemRepository;
  @InjectMocks
  private ItemServiceImpl itemService;
  @Before
  public void setUp(){
    MockitoAnnotations.initMocks(this);
  }
  /**
   * 如果从存储层查询到一个Item, 那么它的 name 将被转化为大写.
   */
  @Test
  public void shouldReturnItemNameInUpperCase() {
    // Given
    Item mockedItem = new Item("it1", "Item 1", "This is item 1", 2000, true);
    when(itemRepository.findById("it1")).thenReturn(mockedItem);
    // When
    String result = itemService.getItemNameUpperCase("it1");
    // Then
    verify(itemRepository, times(1)).findById("it1");
    assertThat(result).isEqualTo("ITEM 1");
  }
}
Mockito 的更多高级用法请参考官方网站和框架配套 wiki。如果需要 mock 静态方法、私有函数等,可以学习 PowerMock, 拉取其源码通过学习单元测试来快速掌握其用法。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
