使用Junit和Mockito對SpringBoot框架專案進行單元測試(一)
阿新 • • 發佈:2019-01-26
使用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專案單元測試的一般思路,測試中其他典型的測試方法和場景會在後面不斷更新。