中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

建設(shè)網(wǎng)站公司哪兒濟(jì)南興田德潤(rùn)有活動(dòng)嗎seo信息查詢(xún)

建設(shè)網(wǎng)站公司哪兒濟(jì)南興田德潤(rùn)有活動(dòng)嗎,seo信息查詢(xún),廣告公司運(yùn)營(yíng)模式和營(yíng)銷(xiāo)方式,網(wǎng)站后臺(tái)是什么單元測(cè)試是指對(duì)軟件中的最小可測(cè)試單元進(jìn)行檢查和驗(yàn)證。在Java中,單元測(cè)試的最小單元是類(lèi)。通過(guò)編寫(xiě)針對(duì)類(lèi)或方法的小段代碼,來(lái)檢驗(yàn)被測(cè)代碼是否符合預(yù)期結(jié)果或行為。執(zhí)行單元測(cè)試可以幫助開(kāi)發(fā)者驗(yàn)證代碼是否正確實(shí)現(xiàn)了功能需求,以及是否能夠…

單元測(cè)試是指對(duì)軟件中的最小可測(cè)試單元進(jìn)行檢查和驗(yàn)證。在Java中,單元測(cè)試的最小單元是類(lèi)。通過(guò)編寫(xiě)針對(duì)類(lèi)或方法的小段代碼,來(lái)檢驗(yàn)被測(cè)代碼是否符合預(yù)期結(jié)果或行為。執(zhí)行單元測(cè)試可以幫助開(kāi)發(fā)者驗(yàn)證代碼是否正確實(shí)現(xiàn)了功能需求,以及是否能夠適應(yīng)應(yīng)用環(huán)境或需求變化。

本文將介紹如何在Spring Boot中編寫(xiě)優(yōu)雅的單元測(cè)試,包括如何添加單元測(cè)試依賴(lài),如何對(duì)不同層次的組件進(jìn)行單元測(cè)試,以及如何使用Mock對(duì)象來(lái)模擬真實(shí)對(duì)象行為。本文假設(shè)讀者已經(jīng)對(duì)Spring Boot和單元測(cè)試有一定的了解和基礎(chǔ)。

目錄

一、Spring Boot中的單元測(cè)試依賴(lài)

?二、Spring Boot中不同層次的單元測(cè)試

service層

Controller層

Repository層

三、Spring Boot中Mock對(duì)象的使用

總結(jié)


一、Spring Boot中的單元測(cè)試依賴(lài)

在Spring Boot項(xiàng)目中,要進(jìn)行單元測(cè)試,首先需要添加相應(yīng)的依賴(lài)。如果使用Maven作為構(gòu)建工具,可以在pom.xml文件中添加以下依賴(lài):


<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope>
</dependency>

這個(gè)依賴(lài)包含了多個(gè)庫(kù)和功能,主要有以下幾個(gè):

  • JUnit:JUnit是Java中最流行和最常用的單元測(cè)試框架,它提供了一套注解和斷言來(lái)編寫(xiě)和運(yùn)行單元測(cè)試。例如@Test注解表示一個(gè)測(cè)試方法,assertEquals斷言表示兩個(gè)值是否相等。
  • Spring Test:Spring Test是一個(gè)基于Spring的測(cè)試框架,它提供了一套注解和工具來(lái)配置和管理Spring上下文和Bean。例如@SpringBootTest注解表示一個(gè)集成測(cè)試類(lèi),@Autowired注解表示自動(dòng)注入一個(gè)Bean。
  • Mockito:Mockito是一個(gè)Java中最流行和最強(qiáng)大的Mock對(duì)象庫(kù),它可以模擬復(fù)雜的真實(shí)對(duì)象行為,從而簡(jiǎn)化測(cè)試過(guò)程。例如@MockBean注解表示創(chuàng)建一個(gè)Mock對(duì)象,when方法表示定義Mock對(duì)象的行為。
  • Hamcrest:Hamcrest是一個(gè)Java中的匹配器庫(kù),它提供了一套語(yǔ)義豐富而易讀的匹配器來(lái)進(jìn)行結(jié)果驗(yàn)證。例如assertThat斷言表示驗(yàn)證一個(gè)值是否滿足一個(gè)匹配器,is匹配器表示兩個(gè)值是否相等。
  • AssertJ:AssertJ是一個(gè)Java中的斷言庫(kù),它提供了一套流暢而直觀的斷言語(yǔ)法來(lái)進(jìn)行結(jié)果驗(yàn)證。例如assertThat斷言表示驗(yàn)證一個(gè)值是否滿足一個(gè)條件,isEqualTo斷言表示兩個(gè)值是否相等。

除了以上這些庫(kù)外,spring-boot-starter-test還包含了其他一些庫(kù)和功能,如JsonPath、JsonAssert、XmlUnit等。這些庫(kù)和功能可以根據(jù)不同的測(cè)試場(chǎng)景進(jìn)行選擇和使用。

?二、Spring Boot中不同層次的單元測(cè)試

service層

Service層是指封裝業(yè)務(wù)邏輯和處理數(shù)據(jù)的層,它通常使用@Service或@Component注解來(lái)標(biāo)識(shí)。在Spring Boot中,對(duì)Service層進(jìn)行單元測(cè)試,可以使用@SpringBootTest注解來(lái)加載完整的Spring上下文,從而可以自動(dòng)注入Service層的Bean。同時(shí),可以使用@MockBean注解來(lái)創(chuàng)建和注入其他層次的Mock對(duì)象,從而避免真實(shí)地調(diào)用其他層次的方法,而是模擬其行為。

例如,假設(shè)有一個(gè)UserService類(lèi),它提供了一個(gè)根據(jù)用戶(hù)ID查詢(xún)用戶(hù)信息的方法:

@Service
public class UserService {@Autowiredprivate UserRepository userRepository;public User getUserById(Long id) {return userRepository.findById(id).orElse(null);}
}

要對(duì)這個(gè)類(lèi)進(jìn)行單元測(cè)試,可以編寫(xiě)以下測(cè)試類(lèi):

@SpringBootTest
public class UserServiceTest {@Autowiredprivate UserService userService;@MockBeanprivate UserRepository userRepository;@Testpublic void testGetUserById() {// 創(chuàng)建一個(gè)User對(duì)象User user = new User();user.setId(1L);user.setName("Alice");user.setEmail("alice@example.com");// 當(dāng)調(diào)用userRepository.findById(1L)時(shí),返回一個(gè)包含user對(duì)象的Optional對(duì)象when(userRepository.findById(1L)).thenReturn(Optional.of(user));// 調(diào)用userService.getUserById方法,傳入1L作為參數(shù),得到一個(gè)User對(duì)象User result = userService.getUserById(1L);// 驗(yàn)證結(jié)果對(duì)象與user對(duì)象相等assertThat(result).isEqualTo(user);// 驗(yàn)證userRepository.findById(1L)方法被調(diào)用了一次verify(userRepository, times(1)).findById(1L);}
}

?

在這個(gè)測(cè)試類(lèi)中,使用了以下幾個(gè)關(guān)鍵點(diǎn)和技巧:

  • 使用@SpringBootTest注解表示加載完整的Spring上下文,并使用@Autowired注解將UserService對(duì)象注入到測(cè)試類(lèi)中。
  • 使用@MockBean注解表示創(chuàng)建一個(gè)UserRepository的Mock對(duì)象,并使用@Autowired注解將其注入到測(cè)試類(lèi)中。這樣可以避免真實(shí)地調(diào)用UserRepository的方法,而是模擬其行為。
  • 使用when方法來(lái)定義Mock對(duì)象的行為,例如當(dāng)調(diào)用userRepository.findById(1L)時(shí),返回一個(gè)包含user對(duì)象的Optional對(duì)象。
  • 使用userService.getUserById方法調(diào)用被測(cè)方法,得到一個(gè)User對(duì)象。
  • 使用AssertJ的斷言語(yǔ)法來(lái)驗(yàn)證結(jié)果對(duì)象與user對(duì)象是否相等??梢允褂枚喾N條件和匹配器來(lái)驗(yàn)證結(jié)果。
  • 使用verify方法來(lái)驗(yàn)證Mock對(duì)象的方法是否被調(diào)用了指定次數(shù)。

Controller層

Controller層是指處理用戶(hù)請(qǐng)求和響應(yīng)的層,它通常使用@RestController或@Controller注解來(lái)標(biāo)識(shí)。在Spring Boot中,對(duì)Controller層進(jìn)行單元測(cè)試,可以使用@WebMvcTest注解來(lái)啟動(dòng)一個(gè)輕量級(jí)的Spring MVC上下文,只加載Controller層的組件。同時(shí),可以使用@AutoConfigureMockMvc注解來(lái)自動(dòng)配置一個(gè)MockMvc對(duì)象,用來(lái)模擬Http請(qǐng)求和驗(yàn)證Http響應(yīng)。

例如,假設(shè)有一個(gè)UserController類(lèi),它提供了一個(gè)根據(jù)用戶(hù)ID查詢(xún)用戶(hù)信息的接口:

@RestController
@RequestMapping("/users")
public class UserController {@Autowiredprivate UserService userService;@GetMapping("/{id}")public ResponseEntity<User> getUserById(@PathVariable Long id) {User user = userService.getUserById(id);if (user == null) {return ResponseEntity.notFound().build();} else {return ResponseEntity.ok(user);}}
}

要對(duì)這個(gè)類(lèi)進(jìn)行單元測(cè)試,可以編寫(xiě)以下測(cè)試類(lèi):

@WebMvcTest(UserController.class)
@AutoConfigureMockMvc
public class UserControllerTest {@Autowiredprivate MockMvc mockMvc;@MockBeanprivate UserService userService;@Testpublic void testGetUserById() throws Exception {// 創(chuàng)建一個(gè)User對(duì)象User user = new User();user.setId(1L);user.setName("Alice");user.setEmail("alice@example.com");// 當(dāng)調(diào)用userService.getUserById(1L)時(shí),返回user對(duì)象when(userService.getUserById(1L)).thenReturn(user);// 模擬發(fā)送GET請(qǐng)求到/users/1,并驗(yàn)證響應(yīng)狀態(tài)碼為200,響應(yīng)內(nèi)容為JSON格式的user對(duì)象mockMvc.perform(get("/users/1")).andExpect(status().isOk()).andExpect(content().contentType(MediaType.APPLICATION_JSON)).andExpect(jsonPath("$.id").value(1L)).andExpect(jsonPath("$.name").value("Alice")).andExpect(jsonPath("$.email").value("alice@example.com"));// 驗(yàn)證userService.getUserById(1L)方法被調(diào)用了一次verify(userService, times(1)).getUserById(1L);}
}

在這個(gè)測(cè)試類(lèi)中,使用了以下幾個(gè)關(guān)鍵點(diǎn)和技巧:

  • 使用@WebMvcTest(UserController.class)注解表示只加載UserController類(lèi)的組件,不加載其他層次的組件。
  • 使用@AutoConfigureMockMvc注解表示自動(dòng)配置一個(gè)MockMvc對(duì)象,并使用@Autowired注解將其注入到測(cè)試類(lèi)中。
  • 使用@MockBean注解表示創(chuàng)建一個(gè)UserService的Mock對(duì)象,并使用@Autowired注解將其注入到測(cè)試類(lèi)中。這樣可以避免真實(shí)地調(diào)用UserService的方法,而是模擬其行為。
  • 使用when方法來(lái)定義Mock對(duì)象的行為,例如當(dāng)調(diào)用userService.getUserById(1L)時(shí),返回user對(duì)象。
  • 使用mockMvc.perform方法來(lái)模擬發(fā)送Http請(qǐng)求,并使用andExpect方法來(lái)驗(yàn)證Http響應(yīng)。可以使用多種匹配器來(lái)驗(yàn)證響應(yīng)狀態(tài)碼、內(nèi)容類(lèi)型、內(nèi)容值等。
  • 使用verify方法來(lái)驗(yàn)證Mock對(duì)象的方法是否被調(diào)用了指定次數(shù)。

Repository層

Repository層是指封裝數(shù)據(jù)訪問(wèn)和持久化的層,它通常使用@Repository或@JpaRepository注解來(lái)標(biāo)識(shí)。在Spring Boot中,對(duì)Repository層進(jìn)行單元測(cè)試,可以使用@DataJpaTest注解來(lái)啟動(dòng)一個(gè)嵌入式數(shù)據(jù)庫(kù),并自動(dòng)配置JPA相關(guān)的組件。同時(shí),可以使用@TestEntityManager注解來(lái)獲取一個(gè)TestEntityManager對(duì)象,用來(lái)操作和驗(yàn)證數(shù)據(jù)庫(kù)數(shù)據(jù)。

例如,假設(shè)有一個(gè)UserRepository接口,它繼承了JpaRepository接口,并提供了一個(gè)根據(jù)用戶(hù)姓名查詢(xún)用戶(hù)列表的方法:

@Repository
public interface UserRepository extends JpaRepository<User, Long> {List<User> findByName(String name);
}

要對(duì)這個(gè)接口進(jìn)行單元測(cè)試,可以編寫(xiě)以下測(cè)試類(lèi):

@DataJpaTest
public class UserRepositoryTest {@Autowiredprivate UserRepository userRepository;@Autowiredprivate TestEntityManager testEntityManager;@Testpublic void testFindByName() {// 創(chuàng)建兩個(gè)User對(duì)象,并使用testEntityManager.persist方法將其保存到數(shù)據(jù)庫(kù)中User user1 = new User();user1.setName("Bob");user1.setEmail("bob@example.com");testEntityManager.persist(user1);User user2 = new User();user2.setName("Bob");user2.setEmail("bob2@example.com");testEntityManager.persist(user2);// 調(diào)用userRepository.findByName方法,傳入"Bob"作為參數(shù),得到一個(gè)用戶(hù)列表List<User> users = userRepository.findByName("Bob");// 驗(yàn)證用戶(hù)列表的大小為2,且包含了user1和user2assertThat(users).hasSize(2);assertThat(users).contains(user1, user2);}
}

在這個(gè)測(cè)試類(lèi)中,使用了以下幾個(gè)關(guān)鍵點(diǎn)和技巧:

  • 使用@DataJpaTest注解表示啟動(dòng)一個(gè)嵌入式數(shù)據(jù)庫(kù),并自動(dòng)配置JPA相關(guān)的組件。這樣可以避免依賴(lài)外部數(shù)據(jù)庫(kù),而是使用內(nèi)存數(shù)據(jù)庫(kù)進(jìn)行測(cè)試。
  • 使用@Autowired注解將UserRepository和TestEntityManager對(duì)象注入到測(cè)試類(lèi)中。
  • 使用testEntityManager.persist方法將User對(duì)象保存到數(shù)據(jù)庫(kù)中。這樣可以準(zhǔn)備好測(cè)試數(shù)據(jù),而不需要手動(dòng)插入數(shù)據(jù)。
  • 使用userRepository.findByName方法調(diào)用自定義的查詢(xún)方法,得到一個(gè)用戶(hù)列表。
  • 使用AssertJ的斷言語(yǔ)法來(lái)驗(yàn)證用戶(hù)列表的大小和內(nèi)容??梢允褂枚喾N條件和匹配器來(lái)驗(yàn)證結(jié)果。

三、Spring Boot中Mock對(duì)象的使用

在Spring Boot中,除了使用@WebMvcTest和@DataJpaTest等注解來(lái)加載特定層次的組件外,還可以使用@SpringBootTest注解來(lái)加載完整的Spring上下文,從而進(jìn)行更加集成的測(cè)試。但是,在這種情況下,可能會(huì)遇到一些問(wèn)題,例如:

????????- 測(cè)試過(guò)程中需要依賴(lài)外部資源,如數(shù)據(jù)庫(kù)、消息隊(duì)列、Web服務(wù)等。這些資源可能不穩(wěn)定或不可用,導(dǎo)致測(cè)試失敗或超時(shí)。
????????- 測(cè)試過(guò)程中需要調(diào)用其他組件或服務(wù)的方法,但是這些方法的實(shí)現(xiàn)或行為不確定或不可控,導(dǎo)致測(cè)試結(jié)果不可預(yù)測(cè)或不準(zhǔn)確。
????????- 測(cè)試過(guò)程中需要驗(yàn)證一些難以觀察或測(cè)量的結(jié)果,如日志輸出、異常拋出、私有變量值等。這些結(jié)果可能需要使用復(fù)雜或侵入式的方式來(lái)獲取或驗(yàn)證。

為了解決這些問(wèn)題,可以使用Mock對(duì)象來(lái)模擬真實(shí)對(duì)象行為。Mock對(duì)象是指在測(cè)試過(guò)程中替代真實(shí)對(duì)象的虛擬對(duì)象,它可以根據(jù)預(yù)設(shè)的規(guī)則來(lái)返回特定的值或執(zhí)行特定的操作。使用Mock對(duì)象有以下好處:

????????- 降低測(cè)試依賴(lài):通過(guò)使用Mock對(duì)象來(lái)替代外部資源或其他組件,可以減少測(cè)試過(guò)程中對(duì)真實(shí)環(huán)境的依賴(lài),使得測(cè)試更加穩(wěn)定和可靠。
????????- 提高測(cè)試控制:通過(guò)使用Mock對(duì)象來(lái)模擬特定的行為或場(chǎng)景,可以提高測(cè)試過(guò)程中對(duì)真實(shí)對(duì)象行為的控制,使得測(cè)試更加靈活和精確。
????????- 簡(jiǎn)化測(cè)試驗(yàn)證:通過(guò)使用Mock對(duì)象來(lái)返回特定的結(jié)果或觸發(fā)特定的事件,可以簡(jiǎn)化測(cè)試過(guò)程中對(duì)真實(shí)對(duì)象結(jié)果或事件的驗(yàn)證,使得測(cè)試更加簡(jiǎn)單和直觀。

在Spring Boot中,要使用Mock對(duì)象,可以使用@MockBean注解來(lái)創(chuàng)建和注入一個(gè)Mock對(duì)象。這個(gè)注解會(huì)自動(dòng)使用Mockito庫(kù)來(lái)創(chuàng)建一個(gè)Mock對(duì)象,并將其添加到Spring上下文中。同時(shí),可以使用when方法來(lái)定義Mock對(duì)象的行為,以及verify方法來(lái)驗(yàn)證Mock對(duì)象的方法調(diào)用。

例如,假設(shè)有一個(gè)EmailService接口,它提供了一個(gè)發(fā)送郵件的方法:

public interface EmailService {void sendEmail(String to, String subject, String content);
}

要對(duì)這個(gè)接口進(jìn)行單元測(cè)試,可以編寫(xiě)以下測(cè)試類(lèi):

@SpringBootTest
public class EmailServiceTest {@Autowiredprivate UserService userService;@MockBeanprivate EmailService emailService;@Testpublic void testSendEmail() {// 創(chuàng)建一個(gè)User對(duì)象User user = new User();user.setId(1L);user.setName("Alice");user.setEmail("alice@example.com");// 當(dāng)調(diào)用emailService.sendEmail方法時(shí),什么也不做doNothing().when(emailService).sendEmail(anyString(), anyString(), anyString());// 調(diào)用userService.sendWelcomeEmail方法,傳入user對(duì)象作為參數(shù)userService.sendWelcomeEmail(user);// 驗(yàn)證emailService.sendEmail方法被調(diào)用了一次,并且參數(shù)分別為user.getEmail()、"Welcome"、"Hello, Alice"verify(emailService, times(1)).sendEmail(user.getEmail(), "Welcome", "Hello, Alice");}
}

在這個(gè)測(cè)試類(lèi)中,使用了以下幾個(gè)關(guān)鍵點(diǎn)和技巧:

  • 使用@SpringBootTest注解表示加載完整的Spring上下文,并使用@Autowired注解將UserService對(duì)象注入到測(cè)試類(lèi)中。
  • 使用@MockBean注解表示創(chuàng)建一個(gè)EmailService的Mock對(duì)象,并使用@Autowired注解將其注入到測(cè)試類(lèi)中。這樣可以避免真實(shí)地調(diào)用EmailService的方法,而是模擬其行為。
  • 使用doNothing方法來(lái)定義Mock對(duì)象的行為,例如當(dāng)調(diào)用emailService.sendEmail方法時(shí),什么也不做。也可以使用doReturn、doThrow、doAnswer等方法來(lái)定義其他類(lèi)型的行為。
  • 使用anyString方法來(lái)表示任意字符串類(lèi)型的參數(shù)。也可以使用anyInt、anyLong、anyObject等方法來(lái)表示其他類(lèi)型的參數(shù)。
  • 使用userService.sendWelcomeEmail方法調(diào)用被測(cè)方法,傳入user對(duì)象作為參數(shù)。
  • 使用verify方法來(lái)驗(yàn)證Mock對(duì)象的方法是否被調(diào)用了指定次數(shù),并且參數(shù)是否符合預(yù)期。也可以使用never、atLeast、atMost等方法來(lái)表示其他次數(shù)的驗(yàn)證。

除了使用@MockBean注解來(lái)創(chuàng)建和注入Mock對(duì)象外,還可以使用@SpyBean注解來(lái)創(chuàng)建和注入Spy對(duì)象。Spy對(duì)象是指在測(cè)試過(guò)程中部分替代真實(shí)對(duì)象的虛擬對(duì)象,它可以根據(jù)預(yù)設(shè)的規(guī)則來(lái)返回特定的值或執(zhí)行特定的操作,同時(shí)保留真實(shí)對(duì)象的其他行為。使用Spy對(duì)象有以下好處:

  • 保留真實(shí)行為:通過(guò)使用Spy對(duì)象來(lái)替代真實(shí)對(duì)象,可以保留真實(shí)對(duì)象的其他行為,使得測(cè)試更加接近真實(shí)環(huán)境。
  • 修改部分行為:通過(guò)使用Spy對(duì)象來(lái)模擬特定的行為或場(chǎng)景,可以修改真實(shí)對(duì)象的部分行為,使得測(cè)試更加靈活和精確。
  • 觀察真實(shí)結(jié)果:通過(guò)使用Spy對(duì)象來(lái)返回特定的結(jié)果或觸發(fā)特定的事件,可以觀察真實(shí)對(duì)象的結(jié)果或事件,使得測(cè)試更加直觀和可信。

在Spring Boot中,要使用Spy對(duì)象,可以使用@SpyBean注解來(lái)創(chuàng)建和注入一個(gè)Spy對(duì)象。這個(gè)注解會(huì)自動(dòng)使用Mockito庫(kù)來(lái)創(chuàng)建一個(gè)Spy對(duì)象,并將其添加到Spring上下文中。同時(shí),可以使用when方法來(lái)定義Spy對(duì)象的行為,以及verify方法來(lái)驗(yàn)證Spy對(duì)象的方法調(diào)用。

例如,假設(shè)有一個(gè)LogService接口,它提供了一個(gè)記錄日志的方法:

public interface LogService {void log(String message);
}

要對(duì)這個(gè)接口進(jìn)行單元測(cè)試,可以編寫(xiě)以下測(cè)試類(lèi):

@SpringBootTest
public class LogServiceTest {@Autowiredprivate UserService userService;@SpyBeanprivate LogService logService;@Testpublic void testLog() {// 創(chuàng)建一個(gè)User對(duì)象User user = new User();user.setId(1L);user.setName("Alice");user.setEmail("alice@example.com");// 當(dāng)調(diào)用logService.log方法時(shí),調(diào)用真實(shí)的方法,并打印參數(shù)到控制臺(tái)doAnswer(invocation -> {String message = invocation.getArgument(0);System.out.println(message);invocation.callRealMethod();return null;}).when(logService).log(anyString());// 調(diào)用userService.createUser方法,傳入user對(duì)象作為參數(shù)userService.createUser(user);// 驗(yàn)證logService.log方法被調(diào)用了兩次,并且參數(shù)分別為"Creating user: Alice"、"User created: Alice"verify(logService, times(2)).log(anyString());verify(logService, times(1)).log("Creating user: Alice");verify(logService, times(1)).log("User created: Alice");}
}

在這個(gè)測(cè)試類(lèi)中,使用了以下幾個(gè)關(guān)鍵點(diǎn)和技巧:

  • 使用@SpringBootTest注解表示加載完整的Spring上下文,并使用@Autowired注解將UserService對(duì)象注入到測(cè)試類(lèi)中。
  • 使用@SpyBean注解表示創(chuàng)建一個(gè)LogService的Spy對(duì)象,并使用@Autowired注解將其注入到測(cè)試類(lèi)中。這樣可以保留LogService的真實(shí)行為,同時(shí)修改部分行為。
  • 使用doAnswer方法來(lái)定義Spy對(duì)象的行為,例如當(dāng)調(diào)用logService.log方法時(shí),調(diào)用真實(shí)的方法,并打印參數(shù)到控制臺(tái)。也可以使用doReturn、doThrow、doNothing等方法來(lái)定義其他類(lèi)型的行為。
  • 使用anyString方法來(lái)表示任意字符串類(lèi)型的參數(shù)。也可以使用anyInt、anyLong、anyObject等方法來(lái)表示其他類(lèi)型的參數(shù)。
  • 使用userService.createUser方法調(diào)用被測(cè)方法,傳入user對(duì)象作為參數(shù)。
  • 使用verify方法來(lái)驗(yàn)證Spy對(duì)象的方法是否被調(diào)用了指定次數(shù),并且參數(shù)是否符合預(yù)期。也可以使用never、atLeast、atMost等方法來(lái)表示其他次數(shù)的驗(yàn)證。

總結(jié)

本文介紹了如何在Spring Boot中編寫(xiě)優(yōu)雅的單元測(cè)試,包括如何添加單元測(cè)試依賴(lài),如何對(duì)不同層次的組件進(jìn)行單元測(cè)試,以及如何使用Mock對(duì)象和Spy對(duì)象來(lái)模擬真實(shí)對(duì)象行為。本文還給出了每種類(lèi)型的單元測(cè)試的示例代碼,并解釋了其中的關(guān)鍵點(diǎn)和技巧。

通過(guò)編寫(xiě)單元測(cè)試,可以提高Spring Boot應(yīng)用的質(zhì)量和穩(wěn)定性,同時(shí)也可以提高開(kāi)發(fā)者的編程水平和信心。希望本文能夠?qū)δ阌兴鶐椭蛦l(fā),讓你能夠在Spring Boot中編寫(xiě)優(yōu)雅的單元測(cè)試。

http://m.risenshineclean.com/news/65335.html

相關(guān)文章:

  • wordpress域名臨時(shí)域名搜索引擎優(yōu)化答案
  • wordpress首頁(yè)顯示文章網(wǎng)站seo 優(yōu)化
  • 易語(yǔ)言 網(wǎng)站開(kāi)發(fā)沈陽(yáng)線上教學(xué)
  • 做網(wǎng)站和網(wǎng)絡(luò)推廣青島百度推廣優(yōu)化怎么做的
  • 做新網(wǎng)站怎樣提交360軟文撰寫(xiě)公司
  • 書(shū)荒小說(shuō)閱讀器是哪個(gè)網(wǎng)站做的常見(jiàn)的網(wǎng)絡(luò)營(yíng)銷(xiāo)方法
  • 保定哪家做網(wǎng)站專(zhuān)業(yè)網(wǎng)絡(luò)營(yíng)銷(xiāo)的特點(diǎn)和優(yōu)勢(shì)
  • 衡水做淘寶網(wǎng)站中國(guó)職業(yè)培訓(xùn)在線官方網(wǎng)站
  • 成品網(wǎng)站源碼68w68網(wǎng)站seo設(shè)置是什么
  • 湛江免費(fèi)建站公司電腦培訓(xùn)班一般需要多少錢(qián)
  • 公眾號(hào)怎么做網(wǎng)站百度seo優(yōu)化服務(wù)
  • 內(nèi)蒙古做網(wǎng)站的公司購(gòu)物網(wǎng)站
  • 網(wǎng)站共用數(shù)據(jù)庫(kù)學(xué)網(wǎng)絡(luò)營(yíng)銷(xiāo)
  • 做網(wǎng)站分成谷歌網(wǎng)站網(wǎng)址
  • 做業(yè)務(wù) 哪個(gè)網(wǎng)站比較好電商營(yíng)銷(xiāo)推廣方案
  • html靜態(tài)網(wǎng)站模板網(wǎng)上做廣告怎么收費(fèi)
  • 主題教育網(wǎng)站建立seo廣告投放
  • 開(kāi)源系統(tǒng)有哪些windows優(yōu)化大師的作用
  • 網(wǎng)站制作收費(fèi)網(wǎng)絡(luò)整合營(yíng)銷(xiāo)4i原則
  • 山西武漢網(wǎng)站建設(shè)如何對(duì)網(wǎng)站進(jìn)行推廣
  • 企業(yè)需要繳納哪些稅windows優(yōu)化大師是什么
  • 網(wǎng)頁(yè)設(shè)計(jì)網(wǎng)站建設(shè)招聘軟文寫(xiě)作平臺(tái)發(fā)稿
  • 防偽查詢(xún)網(wǎng)站吸引人的微信軟文
  • 外賣(mài)軟件開(kāi)發(fā)大概多少錢(qián)響應(yīng)式網(wǎng)站 樂(lè)云seo品牌
  • 淘寶是行業(yè)門(mén)戶(hù)網(wǎng)站的盈利模式是什么品牌建設(shè)的五個(gè)要素
  • 泉州網(wǎng)站建設(shè)技術(shù)托管網(wǎng)站優(yōu)化一年多少錢(qián)
  • 如皋網(wǎng)站制作中國(guó)最新疫情最新消息
  • 萊特幣做空網(wǎng)站百度外推排名
  • 福州產(chǎn)品網(wǎng)頁(yè)制作的公司電商seo與sem是什么
  • 電子商務(wù)學(xué)了有用嗎上海搜索排名優(yōu)化公司