<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # Spring Boot,Mockito 和 Junit – 單元測試服務層 > 原文: [https://howtodoinjava.com/spring-boot2/testing/spring-boot-mockito-junit-example/](https://howtodoinjava.com/spring-boot2/testing/spring-boot-mockito-junit-example/) 學習使用 [**JUnit**](https://howtodoinjava.com/junit-4/) 和 **Mockito** 測試框架為 Spring 應用的服務層編寫[**單元測試**](https://howtodoinjava.com/best-practices/unit-testing-best-practices-junit-reference-guide/)。 本教程演示 *[SpringBoot](https://howtodoinjava.com/spring-boot-tutorials/) 測試服務層示例*。 ## 1\. Maven 依賴 `spring-boot-starter-test`依賴項包括創建和執行測試所需的所有依賴項。 ```java <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> ``` 如果不使用 spring boot,則包括以下依賴項。 ```java <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <version>2.15.0</version> </dependency> <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-inline</artifactId> <version>2.15.0</version> </dependency> ``` ## 2\. 起步 在此示例中,我們主要對兩個類`EmployeeManager`和`EmployeeDao`進行單元測試。 顧名思義,管理器類代表服務層,而 dao 類正在與數據庫進行交互。 `EmployeeManager`類依賴于`EmployeeDao`和委托方法調用來獲取 pis 最終返回到控制器類的數據。 為了測試`EmployeeManager`中的方法,我們可以通過以下兩種方式創建 JUnit 測試類 `TestEmployeeManager`: #### 2.1 `MockitoJUnitRunner`類 `MockitoJUnitRunner`類自動初始化所??有帶有`@Mock`和`@InjectMock`注解的對象。 ```java @RunWith(MockitoJUnitRunner.class) public class TestEmployeeManager { @InjectMock EmployeeManager manager; @Mock EmployeeDao dao; //tests } ``` #### 2.2 `MockitoAnnotations.initMock()`方法 如果我們不使用`MockitoJUnitRunner`類方法,則可以使用靜態方法`MockitoAnnotations.initMock()`。 在初始化 junit 測試時,該方法還會初始化模擬對象。 ```java public class TestEmployeeManager { @InjectMock EmployeeManager manager; @Mock EmployeeDao dao; @Before public void init() { MockitoAnnotations.initMock(this); } //tests } ``` #### 2.3 `@Mock` vs `@InjectMock` * **`@Mock`** 注解會為其注解的類創建一個模擬實現。 * **`@InjectMock`** 還將創建模擬實現,另外將標有注解`@Mock`的從屬模擬注入其中。 在上面的示例中,我們用`@InjectMock`注解了`EmployeeManager`類,因此模仿者將為`EmployeeManager`類創建模仿對象,并將`EmployeeDao`的模仿依賴項注入其中。 ## 3\. 使用 Mockito 進行 JUnit 測試 讓我們看幾個例子,這些例子編寫了 junit 測試,以使用通過嘲諷創建的模擬對象對服務層方法進行單元測試。 很少有示例方法是`getAllEmployees()`,該方法將返回`EmployeeVO`對象的列表,`getEmployeeById(int id)`以給定 id 返回雇員。 和`createEmployee()`將添加一個雇員對象并返回`void`。 #### 3.1 服務層測試 ```java package com.howtodoinjava.demo; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.List; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMock; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.mockito.junit.MockitoJUnitRunner; import com.howtodoinjava.demo.dao.EmployeeDao; import com.howtodoinjava.demo.model.EmployeeVO; import com.howtodoinjava.demo.service.EmployeeManager; public class TestEmployeeManager { @InjectMock EmployeeManager manager; @Mock EmployeeDao dao; @Before public void init() { MockitoAnnotations.initMock(this); } @Test public void getAllEmployeesTest() { List<EmployeeVO> list = new ArrayList<EmployeeVO>(); EmployeeVO empOne = new EmployeeVO(1, "John", "John", "howtodoinjava@gmail.com"); EmployeeVO empTwo = new EmployeeVO(2, "Alex", "kolenchiski", "alexk@yahoo.com"); EmployeeVO empThree = new EmployeeVO(3, "Steve", "Waugh", "swaugh@gmail.com"); list.add(empOne); list.add(empTwo); list.add(empThree); when(dao.getEmployeeList()).thenReturn(list); //test List<EmployeeVO> empList = manager.getEmployeeList(); assertEquals(3, empList.size()); verify(dao, times(1)).getEmployeeList(); } @Test public void getEmployeeByIdTest() { when(dao.getEmployeeById(1)).thenReturn(new EmployeeVO(1,"Lokesh","Gupta","user@email.com")); EmployeeVO emp = manager.getEmployeeById(1); assertEquals("Lokesh", emp.getFirstName()); assertEquals("Gupta", emp.getLastName()); assertEquals("user@email.com", emp.getEmail()); } @Test public void createEmployeeTest() { EmployeeVO emp = new EmployeeVO(1,"Lokesh","Gupta","user@email.com"); manager.addEmployee(emp); verify(dao, times(1)).addEmployee(emp); } } ``` 單元測試結果將是這樣。 ![Spring boot mockito junit example](https://img.kancloud.cn/60/9c/609c3a4dddab2e9870520439a711c67d_616x314.png) Spring boot mockito junit 示例 #### 3.2 服務層類 ```java import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.howtodoinjava.demo.dao.EmployeeDao; import com.howtodoinjava.demo.model.EmployeeVO; @Service public class EmployeeManager { @Autowired EmployeeDao dao; public List<EmployeeVO> getEmployeeList() { return dao.getEmployeeList(); } public EmployeeVO getEmployeeById(int id) { return dao.getEmployeeById(id); } public void addEmployee(EmployeeVO employee) { dao.addEmployee(employee); } } ``` #### 3.3 DAO 層類 ```java package com.howtodoinjava.demo.dao; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.stereotype.Repository; import com.howtodoinjava.demo.model.EmployeeVO; @Repository public class EmployeeDao { private Map<Integer, EmployeeVO> DB = new HashMap<>(); public List<EmployeeVO> getEmployeeList() { List<EmployeeVO> list = new ArrayList<>(); if(list.isEmpty()) { list.addAll(DB.values()); } return list; } public EmployeeVO getEmployeeById(int id) { return DB.get(id); } public void addEmployee(EmployeeVO employee) { employee.setEmployeeId(DB.keySet().size() + 1); DB.put(employee.getEmployeeId(), employee); } public void updateEmployee(EmployeeVO employee) { DB.put(employee.getEmployeeId(), employee); } public void deleteEmployee(int id) { DB.remove(id); } } ``` ## 4\. Spring Boot Mockito 示例 – 總結 在此 **mockito 教程**中,我們學習了使用 JUnit 和 Mockito 對 Spring Boot 應用中的服務層進行單元測試。 我們學習了如何設置測試類并編寫 JUnit 測試。 我們還了解了`@Mock`和`@InjectMock`注解之間的**區別**。 學習愉快!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看