1. 程式人生 > >使用Junit和Mockito對SpringBoot框架專案進行單元測試(一)

使用Junit和Mockito對SpringBoot框架專案進行單元測試(一)

使用Junit和Mockito對SpringBoot框架專案進行單元測試


看完這篇文章你就可以輕鬆的完成基本的單元測試,使得覆蓋率達到90%以上Mockito 是流行的 Java 單元測試 Mock 框架,免費開源。
Mockito 擁有的非常少的 API,所以開始使用 Mockito,幾乎沒有時間成本。因為只有一種創造 mock 的方式。只要記住,在執行前 stub,而後在互動中驗證。你很快就會發現這樣 TDD java 程式碼是多麼自然。
本文會對單元測試中最常見的問題包括:SpringBoot架構下單元測試的基本思路和方法,私有方法的測試、異常測試、測試驅動開發等方面進行闡述

一、mockito單元測試的一般思路



對被測試類的單個方法進行測試,當遇到依賴的外部資源時,對外部資源進行打樁、模擬。從而達到對該方法的邏輯正確性進行測試的目的。例如我們需要測試一個Spring @service A,他可能使用Autowired註解注入了外部的服務B,那麼我可以使用Mockito的@Mock註解來對B進行Mock,使用Mockito.when(B.method())方法進行打樁,當測試程式執行到B.method()時就不再進入B中而是返回一個我們預先設定好的值或者行為。

例如:

1、測試類原始碼如下:

@RunWith(MockitoJUnitRunner.class)
public class TestUserServiceImpl {


	@InjectMocks
	UserServiceImp userServiceImp;
	
	@Mock
	UserMapper mapper;
	
	
	@Test
	public void	testGet(){			
		User user = new User();
		user.setName("huaAn");
		user.setId(0);
		user.setAccount("9527");
		Mockito.when(mapper.get(0)).thenReturn(user);
		org.junit.Assert.assertTrue(userServiceImp.getUser(0).equals(user));


		
	}
}

2、被測試類

package com.example.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.domain.User;
import com.example.mapper.UserMapper;


@Service
public class UserServiceImp implements UserService {

	@Autowired
	private UserMapper mapper;
	
	@Override
	public List<User> getAll() {
		return mapper.list();
	}

	@Override
	public User getUser(Integer id) {
		return mapper.get(id);
	}

	@Override
	public void insert(User user) {
		mapper.add(user);
	}

	@Override
	public void update(User user) {
		mapper.update(user);
	}

	@Override
	public void delete(Integer id) {
		mapper.delete(id);
	}

	
}
public interface UserMapper {
	
	public List<User> list();

	public User get(Integer id);

	public void add(User user);

	public void update(User user);

	public void delete(Integer id);
}
這就是SpringBoot專案單元測試的一般思路,測試中其他典型的測試方法和場景會在後面不斷更新。