久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

從零開始 -Spring Boot 2單元測(cè)試與集成測(cè)試知識(shí)點(diǎn)全了-知識(shí)鋪

 xxcc140 2019-09-23

知識(shí)鋪: 致力于打造輕知識(shí)點(diǎn),,持續(xù)更新每次的知識(shí)點(diǎn)較少,閱讀不累,。不占太多時(shí)間,,不停地來(lái)喚醒你記憶深處的知識(shí)點(diǎn)。

從零開始 -Spring Boot 2單元測(cè)試與集成測(cè)試知識(shí)點(diǎn)全了-知識(shí)鋪

一.單元測(cè)試與集成測(cè)試

學(xué)習(xí)在Spring Boot應(yīng)用程序中編寫單元測(cè)試和集成測(cè)試,。了解單元測(cè)試和集成測(cè)試之間的區(qū)別,,以及支持此類測(cè)試的注解。

1.1 單元測(cè)試:

通常,,任何軟件應(yīng)用程序都分為不同的模塊和組件,。單獨(dú)測(cè)試一個(gè)這樣的組件時(shí),稱為單元測(cè)試,。編寫該代碼是為了驗(yàn)證一小段代碼是否正在執(zhí)行預(yù)期的操作,。

單元測(cè)試不能驗(yàn)證應(yīng)用程序代碼是否正確地與外部依賴項(xiàng)一起工作。它專注于單個(gè)組件并模擬與該組件交互的所有依賴項(xiàng),。

1.2 集成測(cè)試:

一旦開發(fā)并集成了不同的模塊,,便會(huì)執(zhí)行集成測(cè)試。其主要目的是發(fā)現(xiàn)不同模塊相互交互以端對(duì)端處理用戶請(qǐng)求時(shí)的問(wèn)題,。

集成測(cè)試可以根據(jù)測(cè)試內(nèi)容將整個(gè)應(yīng)用程序進(jìn)行集成測(cè)試,,也可以僅將某些組件進(jìn)行集成測(cè)試。他們可能需要為數(shù)據(jù)庫(kù)實(shí)例和分配資源,。盡管也可以模擬這些交互以提高測(cè)試性能,。

就典型的Spring boot CRUD應(yīng)用,可以編寫單元測(cè)試來(lái)分別測(cè)試REST控制器,,DAO層等,。甚至不需要嵌入式服務(wù)器。

在集成測(cè)試中,,將測(cè)試從控制器到持久層的完整請(qǐng)求處理,。應(yīng)用程序嵌入式服務(wù)器中運(yùn)行,以創(chuàng)建應(yīng)用程序上下文和所有bean,。這些bean中的某些可能會(huì)被覆蓋以模擬某些行為,。

二、依賴關(guān)系

2.1 Junit 4測(cè)試(默認(rèn))

要在Spring Boot應(yīng)用程序中編寫測(cè)試,,最好的方法引入測(cè)試包: spring-boot-starter-test,。它把Junit 4依賴項(xiàng)帶到具有測(cè)試范圍的應(yīng)用程序中,。

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-test</artifactId>

<scope>test</scope>

</dependency>

2.2。Junit 5測(cè)試

Spring Boot也支持Junit 5測(cè)試,。要使用Junit 5,,請(qǐng)包括它的依賴項(xiàng),并從spring-boot-starter-test中排除Junit 4 ,。

編寫集成測(cè)試時(shí),,嵌入式數(shù)據(jù)庫(kù)依賴關(guān)系非常方便。

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-test</artifactId>

<scope>test</scope>

<!-- exclude junit 4 -->

<exclusions>

<exclusion>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

</exclusion>

</exclusions>

</dependency>

<!-- junit 5 -->

<dependency>

<groupId>org.junit.jupiter</groupId>

<artifactId>junit-jupiter-api</artifactId>

<scope>test</scope>

</dependency>

<dependency>

<groupId>org.junit.jupiter</groupId>

<artifactId>junit-jupiter-engine</artifactId>

<scope>test</scope>

</dependency>

<dependency>

<groupId>com.h2database</groupId>

<artifactId>h2</artifactId>

<scope>test</scope>

<version>1.4.194</version>

</dependency>

三.啟動(dòng)測(cè)試

用Spring Boot編寫的測(cè)試可以多種方式運(yùn)行,。讓來(lái)看看幾種最常見的方式,。

3.1。@RunWith(SpringRunner.class)– [Junit 4]

默認(rèn)情況下,,編寫的測(cè)試是在Junit 4中進(jìn)行的,。要運(yùn)行此類測(cè)試,可以在類級(jí)別使用帶有批注的SpringRunner類(擴(kuò)展SpringJUnit4ClassRunner)@RunWith,。

@RunWith(SpringRunner.class)

@WebFluxTest(controllers = EmployeeController.class)

public class EmployeeRestControllerTest {

//tests

}

3.2,。@RunWith(MockitoJUnitRunner.class)– [Junit 4 with Mockito]

它@Mock使用MockitoJUnitRunner測(cè)試首選對(duì)象。它初始化帶有Mock注解的模擬,,因此MockitoAnnotations.initMocks(Object)不需要顯式使用,。在每種測(cè)試方法之前都要初始化模擬。

@RunWith(MockitoJUnitRunner.class)

public class EmployeeRestControllerTest

{

@Mock

private Repository repository;

}

3.3,。@ExtendWith(SpringExtension.class)– [Junit 5]

SpringExtension將Spring TestContext Framework集成到JUnit 5的Jupiter編程模型中。

//@ExtendWith(SpringExtension.class)

// included in @WebFluxTest

@WebFluxTest(controllers = EmployeeController.class)

@Import(EmployeeService.class)

public class EmployeeControllerTest

{

//

}

3.4,。@ExtendWith(MockitoExtension.class)– [Junit 5]

MockitoExtension初始化模擬并處理嚴(yán)格的存根,。等同于MockitoJUnitRunner。

大多數(shù)測(cè)試注解都包含此注解,,因此無(wú)需明確包含它,。

@ExtendWith(MockitoExtension.class)

public class EmployeeControllerTest

{

//

}

四、 Spring Boot 測(cè)試注解

Spring Boot提供了各種注解,,以啟用僅與應(yīng)用程序的某些部分相關(guān)的測(cè)試基礎(chǔ)結(jié)構(gòu),。它還提供了注解,這些注解也有助于集成測(cè)試,。

4.1,。@SpringBootTest

此批注有助于編寫集成測(cè)試。它啟動(dòng)嵌入式服務(wù)器并完全初始化應(yīng)用程序上下文,??梢允褂聾Autowired批注將依賴項(xiàng)注入測(cè)試類中。

還可以使用嵌套的@Configuration類或顯式的@TestConfiguration類提供特定于測(cè)試的bean裝配,。

它還為不同的web環(huán)境模式提供特定環(huán)境支持,,并在定義的或隨機(jī)的端口上偵聽正在運(yùn)行的Web服務(wù)器。它還注冊(cè)了TestRestTemplate和/或WebTestClient的bean,,用于Web測(cè)試,。

@SpringBootTest(classes = SpringBootDemoApplication.class,

webEnvironment = WebEnvironment.RANDOM_PORT)

public class EmployeeControllerIntegrationTests

{

@LocalServerPort

private int port;

@Autowired

private TestRestTemplate restTemplate;

//tests

}

4.2,。@WebMvcTest

該注解用于Spring MVC測(cè)試。它禁用完全自動(dòng)裝配,,而是僅應(yīng)用與MVC測(cè)試相關(guān)的裝配。

它還會(huì)自動(dòng)裝配MockMvc實(shí)例,。通過(guò)將其目標(biāo)類.class作為注入屬性,只能初始化一個(gè)Web控制器,。

@WebMvcTest(EmployeeRESTController.class)

public class TestEmployeeRESTController {

@Autowired

private MockMvc mvc;

//

}

4.3。@WebFluxTest

此注解將禁用完全自動(dòng)裝配,,而僅應(yīng)用與WebFlux測(cè)試相關(guān)的裝配。默認(rèn)情況下,,用@WebFluxTest注解的測(cè)試還將自動(dòng)裝配WebTestClient。

通常,,@ WebFluxTest與@MockBean結(jié)合使用,或@Import創(chuàng)建控制器bean所需的任何協(xié)作者,。

@WebFluxTest(controllers = EmployeeController.class)

@Import(EmployeeService.class)

public class EmployeeControllerTest

{

@MockBean

EmployeeRepository repository;

@Autowired

private WebTestClient webClient;

//tests

}

4.4。其他常用注解

  • @JdbcTest – 當(dāng)測(cè)試僅關(guān)注基于jdbc的組件時(shí),,可用于典型的jdbc測(cè)試。它禁用完全自動(dòng)裝配,,而是僅應(yīng)用與jdbc測(cè)試相關(guān)的裝配。

  • 默認(rèn)情況下,,用@JdbcTest注解的測(cè)試是事務(wù)性的,,并在每個(gè)測(cè)試結(jié)束時(shí)回滾,。注解裝配了一個(gè)內(nèi)存嵌入式數(shù)據(jù)庫(kù)和JdbcTemplate。

  • @JooqTest –當(dāng)測(cè)試僅針對(duì)基于jOOQ的組件時(shí)可以使用,。注意,,默認(rèn)情況下,以@JooqTest注解的測(cè)試使用應(yīng)用程序裝配的數(shù)據(jù)庫(kù),。若要使用嵌入式內(nèi)存數(shù)據(jù)庫(kù),,可以使用@AutoConfigureTestDatabase批注覆蓋這些設(shè)置,。

  • @JsonTest –當(dāng)測(cè)試僅關(guān)注JSON序列化時(shí)使用,。它初始化@JsonComponent,JacksonTester,,JsonbTester和GsonTester領(lǐng)域,。

  • @DataJpaTest –可用于測(cè)試JPA應(yīng)用程序。默認(rèn)情況下,,它將掃描@Entity類并裝配Spring Data JPA存儲(chǔ)庫(kù),。如果在類路徑上有嵌入式數(shù)據(jù)庫(kù),它也將裝配一個(gè),。

  • 默認(rèn)情況下,,數(shù)據(jù)JPA測(cè)試是事務(wù)性的,并在每次測(cè)試結(jié)束時(shí)回滾,。

  • 數(shù)據(jù)JPA測(cè)試也可以注入TestEntityManager的bean,,它提供了EntityManager專門為測(cè)試設(shè)計(jì)的標(biāo)準(zhǔn)JPA的替代方案。

  • @DataMongoTest –用于測(cè)試MongoDB應(yīng)用程序,。默認(rèn)情況下,它裝配內(nèi)存嵌入式MongoDB(如果有),,裝配MongoTemplate,,掃描@Document類,并裝配Spring Data MongoDB存儲(chǔ)庫(kù),。

  • @DataRedisTest –用于測(cè)試Redis應(yīng)用程序。默認(rèn)情況下,,它會(huì)掃描@RedisHash類并裝配Spring Data Redis存儲(chǔ)庫(kù)。

  • @DataLdapTest –用于測(cè)試LDAP應(yīng)用程序,。默認(rèn)情況下,,它裝配內(nèi)存嵌入式LDAP(如果可用),裝配LdapTemplate,,掃描@Entry類,,并裝配Spring Data LDAP存儲(chǔ)庫(kù),。

  • @RestClientTest –用于測(cè)試REST客戶端。默認(rèn)情況下,,它會(huì)自動(dòng)裝配Jackson,GSON和Jsonb支持,,裝配RestTemplateBuilder,,并添加對(duì)的支持MockRestServiceServer。

五.測(cè)試裝配

@TestConfiguration是一種特殊的形式@Configuration,,可用于定義其他bean或測(cè)試的自定義項(xiàng),。

在Spring啟動(dòng)中,,@TestConfiguration將不會(huì)通過(guò)組件掃描來(lái)拾取在頂級(jí)類中裝配有注解的任何bean ,。必須使用包含測(cè)試用例的類顯式注冊(cè)@TestConfiguration類。

最好的是,,這些測(cè)試裝配不會(huì)自動(dòng)成為應(yīng)用程序主裝配的一部分。僅可使用以下兩種方式之一按需提供這些附加測(cè)試裝配,,即:

5.1,。@導(dǎo)入注解

它稱為將一個(gè)或多個(gè)裝配類導(dǎo)入應(yīng)用程序上下文或Spring測(cè)試上下文中。

@Import(MyTestConfiguration.class)

@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)

public class SpringBootDemoApplicationTests

{

@LocalServerPort

int randomServerPort;

@Autowired

DataSource datasource;

//tests

}

5.2,。靜態(tài)嵌套類

可以在測(cè)試類內(nèi)部的嵌套類中定義測(cè)試裝配,。嵌套類可以使用@Configuration或@TestConfiguration批注進(jìn)行注解。

如果是嵌套@Configuration類,,則將使用給定的裝配“代替”應(yīng)用程序的主要裝配,。

嵌套@TestConfiguration類用于“附加”應(yīng)用程序的主要裝配。

@Import(MyTestConfiguration.class)

@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)

public class SpringBootDemoApplicationTests

{

@LocalServerPort

int randomServerPort;

@Autowired

DataSource datasource;

//tests

}

六.模擬 mock測(cè)試數(shù)據(jù)

對(duì)于使用或不使用Mockito的依賴關(guān)系,,Spring Boot都提供了出色的支持,。

6.1。與Mockito結(jié)合 – @Mock

@Mock用于模擬創(chuàng)建,。它使測(cè)試類更具可讀性,。在測(cè)試類中,,MockitoAnnotations.initMocks(testClass)必須至少使用一次以處理模仿注解,。

請(qǐng)注意,如果正在使用,,RunWith(MockitoJUnitRunner.class)則無(wú)需顯式使用MockitoAnnotations.initMocks(),。在每種測(cè)試方法之前都要初始化模擬。

用于@Mock不需要Spring文本上下文的單元測(cè)試中,。

6.2。沒有Mockito – @MockBean

@MockBean批注用于將模擬添加到Spring ApplicationContext,。它允許模擬類或接口,并記錄和驗(yàn)證其行為,。

有趣的是,,上下文中定義的任何相同類型的現(xiàn)有bean都將被該模擬代替,。如果沒有定義現(xiàn)有的bean,將添加一個(gè)新的bean,。

@MockBean與mockito的相似,,@Mock但具有Spring支持。通常會(huì)使用@MockBean連同任一@WebMvcTest或@WebFluxTest注解,。這些注解適用于Web測(cè)試片,,并且僅限于單個(gè)控制器。

在給定的示例中,,在模擬EmployeeRepository的bean中,。這樣,將調(diào)用所有應(yīng)用程序代碼,,但是這也只是模擬所有與數(shù)據(jù)庫(kù)交互方式,。

@WebFluxTest(controllers = EmployeeController.class)

@Import(EmployeeService.class)

public class EmployeeControllerTest

{

@MockBean

EmployeeRepository repository;

@Autowired

private WebTestClient webClient;

//tests

}

七.結(jié)論

Spring Boot為應(yīng)用程序及其各種模塊的單元測(cè)試和集成測(cè)試提供了出色的支持。將非常小心地通過(guò)使用注解來(lái)使用所提供的支持,。

使用@SpringBootTest注解進(jìn)行集成測(cè)試,,而使用其他自動(dòng)裝配批注進(jìn)行特定組件的單元測(cè)試。

模擬特定行為是非常普遍的要求,,為此,,可以使用模擬的@Mock或Spring的@MockBean注解。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多