国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

NetMock 簡介:簡化 Java、Android 和 Kotlin 多平臺中的 HTTP 請求測試

這篇具有很好參考價值的文章主要介紹了NetMock 簡介:簡化 Java、Android 和 Kotlin 多平臺中的 HTTP 請求測試。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

NetMock 簡介:簡化 Java、Android 和 Kotlin 多平臺中的 HTTP 請求測試

NetMock 簡介:簡化 Java、Android 和 Kotlin 多平臺中的 HTTP 請求測試

NetMock可讓我們擺脫在測試環(huán)境中模擬請求和響應(yīng)的復(fù)雜性。
NetMock 簡介:簡化 Java、Android 和 Kotlin 多平臺中的 HTTP 請求測試
NetMock是一個功能強(qiáng)大、用戶友好的庫,旨在簡化模擬HTTP請求和響應(yīng)的過程。

對開發(fā)者來說,測試HTTP請求經(jīng)常會帶來一些挑戰(zhàn),因為要在測試環(huán)境中模擬請求和響應(yīng)的復(fù)雜性很高。這樣就會增加手動測試的時間和精力投入。我自己曾經(jīng)也遇到過使用其他HTTP庫和繁瑣的模擬工具時的困擾,于是決定引入一個極好的解決方案:NetMock。

NetMock與Java、Android和Kotlin Multiplatform集成非常方便。只需要進(jìn)行簡單的設(shè)置,就可以輕松創(chuàng)建模擬,準(zhǔn)確模仿客戶端請求和真實終端點的響應(yīng)。NetMock的一個關(guān)鍵優(yōu)勢是對模擬HTTP請求和響應(yīng)采用了統(tǒng)一的方法。這在使用不同庫的項目上或者考慮從一種庫轉(zhuǎn)換到另一種庫時特別有用。

NetMock還有一個值得注意的特點,就是用戶友好的設(shè)計。與其他許多HTTP模擬工具不同,NetMock更注重易用性。這個庫提供了直觀的界面和簡單的設(shè)置過程,方便開發(fā)者更好地掌握HTTP庫的知識。

不管您是資深開發(fā)者還是剛剛起步,NetMock都是簡化工作流程、減少創(chuàng)建可靠軟件所需的時間和精力的完美解決方案。

如果您想進(jìn)一步了解NetMock,可以在GitHub上找到NetMock的代碼庫,網(wǎng)址是https://github.com/DenisBronx/NetMock

提升HTTP相關(guān)代碼的測試策略

作為一名專業(yè)軟件工程師,我堅信對于所有代碼的全面單元測試非常重要。然而,我發(fā)現(xiàn)許多開發(fā)人員在網(wǎng)絡(luò)層的單元測試方面存在一個常見問題,就是因為模擬和測試這個領(lǐng)域比較困難,所以他們往往忽視了該部分的單元測試。相反,他們更傾向于依賴端到端自動化測試或手動測試。

在多個項目中,我發(fā)現(xiàn)一種解決方法是將與HTTP相關(guān)的代碼分離出來,以便能夠獨立測試系統(tǒng)的其他部分。雖然這種方法可以使代碼庫和測試類更加簡潔,但也往往導(dǎo)致忽視對HTTP代碼本身的測試,因為大家覺得這部分很難測試。然而,這樣會導(dǎo)致與HTTP請求和JSON解析有關(guān)的關(guān)鍵邏輯沒有得到充分驗證。

這個問題在使用Retrofit庫的項目中特別突出,該庫通過接口抽象了與HTTP相關(guān)的邏輯。以下是一個代碼片段的例子:

interface GitHubService {
    @GET("users/{user}/repos")
    suspend fun listRepos(@Path("user") user: String): List<RepoDto>
}

class GitHubRepositoryImpl(
    private val githubService: GitHubService,
    private val repoMapper: RepoMapper
): GitHubRepository {
    override suspend fun listRepos(user: String): List<Repo> {
        val repoDtos = githubService.listRepos(user)
        return repoMapper.map(repoDtos)
    }
}

雖然這種方法可以簡化存儲庫和測試類,但它通常會忽略與HTTP相關(guān)的重要測試。此外,開發(fā)人員可能會為了簡化存儲庫的單元測試而創(chuàng)造一些不必要的組件。

單元測試的目的是為了防止和發(fā)現(xiàn)開發(fā)人員犯的錯誤,并確保代碼按照預(yù)期的功能運(yùn)行。如果沒有充分的測試,即使是一些簡單的錯誤,比如將路徑從users/{user}/repos改為user/{user}/repos,或者在RepoDto中修改一個字段的名稱,都可能會被忽視掉。這在專業(yè)的項目中是不能接受的。

我并沒有針對Retrofit庫本身提出批評。

相反,我認(rèn)為它是一款非常出色且易于理解的庫。

此外,我也認(rèn)識到將與HTTP相關(guān)的代碼分離到獨立的組件中對于組織和可維護(hù)性是很有價值的。

然而,我想著重指出我在很多項目中觀察到的一個有缺陷的測試策略。這個策略往往沒有充分關(guān)注對HTTP代碼進(jìn)行全面的測試,導(dǎo)致一些潛在問題被忽視掉。通過強(qiáng)調(diào)這個問題,我希望鼓勵開發(fā)人員優(yōu)先考慮對與HTTP相關(guān)的邏輯進(jìn)行全面的測試,從而確保項目的整體質(zhì)量和可靠性。
NetMock 簡介:簡化 Java、Android 和 Kotlin 多平臺中的 HTTP 請求測試

使用NetMock來Mocking請求與響應(yīng)

@Test
fun `your test`() = runTest {
    val user = "some_user"
    netMock.addMock(
        request = {
            method = Method.Get
            requestUrl = "https://api.github.com/users/$user/repos"
        },
        response = {
            code = 200
            body = readFromResources("responses/repo_list.json")
        }
    )

    val result = sut.listRepos(user)

    //...
}

為了模擬請求和響應(yīng),您可以使用NetMock提供的簡單API。

通過將模擬項添加到預(yù)期請求和響應(yīng)的隊列中,在測試期間可以攔截和控制HTTP交互的行為。

創(chuàng)建一個NetMock實例

NetMock提供了兩種版本:netmock-servernetmock-engine

netmock-server版本適用于Java、Kotlin和Android,它不依賴于任何庫。通過將網(wǎng)絡(luò)請求重定向到本地Web服務(wù)器(MockWebServer),可以模擬網(wǎng)絡(luò)請求。該版本非常適合在非多平臺項目上工作的開發(fā)人員,他們希望在不需要設(shè)置獨立服務(wù)器的情況下測試網(wǎng)絡(luò)請求。

另一方面,netmock-engine版本專門為使用Ktor或Kotlin Multiplatform的開發(fā)人員設(shè)計。它使用MockEngine代替本地服務(wù)器,在使用Ktor的開發(fā)人員中具有輕量級和多平臺的優(yōu)勢。

使用NetMockServer

要將netmock-server添加到項目中,請將以下內(nèi)容添加到build.gradle文件的依賴項中:

dependencies {
    testImplementation "io.github.denisbronx.netmock:netmock-server:0.4.0"
}

接下來,按照以下方式創(chuàng)建一個NetMockServer實例:

@get:Rule
val netMock = NetMockServerRule()

NetMockServer啟動了一個本地服務(wù)器,使用MockWebServer來攔截您的請求。NetMockServerRule處理了服務(wù)器的生命周期,在每個測試中自動啟動和關(guān)閉它。

一旦服務(wù)器開始運(yùn)行,您可以使用netmock.baseUrl配置您的代碼,將其指向localhost的基本URL。以下是Retrofit和Ktor的示例:

使用localhostRetrofit示例:

@get:Rule
val netMock = NetMockServerRule()

private val service = Retrofit.Builder()
    .baseUrl(netMock.baseUrl)
    .build()
    .create(GitHubService::class.java)

使用localhostKtor示例:

@get:Rule
val netMock = NetMockServerRule()
    
private val client = HttpClient(OkHttp) {
    defaultRequest {
        url(netMock.baseUrl)
    }
}

或者,您可以通過使用netmock.interceptor來添加一個攔截器,該攔截器會自動將請求重定向到本地主機(jī):

下面是一個使用真實URL的Retrofit示例:

@get:Rule
val netMock = NetMockServerRule()

private val service = Retrofit.Builder()
    .baseUrl("https://api.github.com/")
    .client(OkHttpClient.Builder().addInterceptor(netMock.interceptor).build())
    .build()
    .create(GitHubService::class.java)

下面是一個使用真實URL的Ktor示例:

@get:Rule
val netMock = NetMockServerRule()
    
private val client = HttpClient(OkHttp) {
    engine {
        addInterceptor(netMock.interceptor)
    }
}

建議使用攔截器,因為它可以讓您處理真實和動態(tài)的URL。

不過要注意,您需要使用與OkHttp攔截器兼容的庫,比如OkHttp本身、Retrofit或Ktor。

結(jié)論

除了初始化過程外,NetMock的兩個版本基本相同。這意味著在netmock-servernetmock-engine之間切換時,只需要做一些小的修改。這種靈活性使您能夠無需改動測試代碼,順利地在不同的庫之間切換,比如從Retrofit切換到Ktor,或者反過來。

將測試框架與底層庫解耦會增強(qiáng)您重構(gòu)代碼時的自信心。進(jìn)行修改時,您只需修改生產(chǎn)代碼,而測試代碼保持不變。這種方法大大降低了在重構(gòu)過程中產(chǎn)生意外副作用的風(fēng)險,并確保您的測試準(zhǔn)確反映了代碼的行為。

總的來說,NetMock的靈活性使您能夠輕松適應(yīng)不同的庫,并且方便地進(jìn)行代碼重構(gòu),從而增強(qiáng)代碼的可靠性和可維護(hù)性。

最后,我要衷心感謝那些抽出時間閱讀本文的讀者們。我希望所提供的見解能夠增進(jìn)大家對于在網(wǎng)絡(luò)層進(jìn)行全面測試的重要性的理解。

再次感謝大家的關(guān)注,請在使用NetMock進(jìn)行愉快測試時保持關(guān)注!

GitHub

https://github.com/square/okhttp/tree/master/mockwebserver
https://github.com/DenisBronx/NetMock
NetMock 簡介:簡化 Java、Android 和 Kotlin 多平臺中的 HTTP 請求測試文章來源地址http://www.zghlxwxcb.cn/news/detail-500069.html

到了這里,關(guān)于NetMock 簡介:簡化 Java、Android 和 Kotlin 多平臺中的 HTTP 請求測試的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Java高級語法】(十六)方法引用:掌握J(rèn)ava中的方法引用,簡化代碼的實用指南~

    【Java高級語法】(十六)方法引用:掌握J(rèn)ava中的方法引用,簡化代碼的實用指南~

    方法引用是Java編程語言中的一個重要特性,它首次出現(xiàn)在Java 8版本中。這一特性旨在簡化函數(shù)式編程中使用Lambda表達(dá)式的代碼,使代碼更加清晰、簡潔。 方法引用是通過名稱引用一個現(xiàn)有的方法來代替Lambda表達(dá)式的一種方式 。它允許將方法本身作為一個對象傳遞或存儲,并

    2024年02月16日
    瀏覽(29)
  • Android初學(xué)之a(chǎn)ndroid studio運(yùn)行java/kotlin程序

    Android初學(xué)之a(chǎn)ndroid studio運(yùn)行java/kotlin程序

    第一步驟: File — New — New Module ,然后彈出一個框,(左邊)選擇 Java or Kotlin Library ,(右邊)編輯自己的圖書館名、包名、類名,選擇 Java 一個語言,然后 Finish 如下圖: 然后,就可以看見我新建的 java Library 了,如下圖: 第二步驟:馬上寫個測試程序 看看能不能運(yùn)行

    2024年02月11日
    瀏覽(19)
  • 簡化代碼結(jié)構(gòu)與提高靈活性:學(xué)習(xí)Java設(shè)計模式中的裝飾器模式

    簡化代碼結(jié)構(gòu)與提高靈活性:學(xué)習(xí)Java設(shè)計模式中的裝飾器模式 在軟件開發(fā)中,我們經(jīng)常會遇到需要在不修改現(xiàn)有代碼的情況下,對已有對象進(jìn)行功能擴(kuò)展或修改的需求。此時,裝飾器模式就是一種非常有用的設(shè)計模式,它通過動態(tài)地將責(zé)任附加到對象上,來擴(kuò)展對象的功能

    2024年02月16日
    瀏覽(15)
  • Android實戰(zhàn)基礎(chǔ) - Java、Kotlin 代碼互轉(zhuǎn)

    Android實戰(zhàn)基礎(chǔ) - Java、Kotlin 代碼互轉(zhuǎn)

    在Android現(xiàn)階段,Kotlin已經(jīng)成為普遍性使用的語言,而在其使用階段中Java和Kotlin的混用很常見,為了便于開發(fā),我們需要掌握J(rèn)ava、Kotlin文件的轉(zhuǎn)換 這應(yīng)該是我以前剛學(xué)Kotlin時就想記錄的一篇blog,沒想到隔了這么久才進(jìn)行記錄(嗯… 主要這倆年好像有點忙…) 個人建議:正常

    2024年02月11日
    瀏覽(22)
  • Kotlin & Compose Multiplatform 跨平臺(Android端、桌面端)開發(fā)實踐之使用 SQLDelight 將數(shù)據(jù)儲存至數(shù)據(jù)庫

    Kotlin & Compose Multiplatform 跨平臺(Android端、桌面端)開發(fā)實踐之使用 SQLDelight 將數(shù)據(jù)儲存至數(shù)據(jù)庫

    取標(biāo)題的時候我還在想,我應(yīng)該寫 Compose 跨平臺呢還是寫 Kotlin 跨平臺。 畢竟對于我的整體項目而言,確實是 Compose 跨平臺開發(fā),但是對于我這篇文章要說的東西,那其實也涉及不到多少 Compose 相關(guān)的內(nèi)容,更多的應(yīng)該是 Kotlin Multiplatform 相關(guān)的內(nèi)容。 二者取舍不下,干脆都

    2024年02月15日
    瀏覽(23)
  • Android java項目添加kotlin混合開發(fā)環(huán)境配置

    Android Studio java代碼中添加kotlin混合開發(fā) 1.項目的build.gradle中添加kotlin-gradle-plugin buildscript { ? ? repositories { ? ? ? ? google() ? ? ? ? jcenter() ? ? ? ?? ? ? } ? ? dependencies { ? ? ? ? classpath \\\'com.android.tools.build:gradle:7.3.1\\\' ? ? ? ? classpath \\\"org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.20\\\"

    2023年04月19日
    瀏覽(24)
  • Spring-1-深入理解Spring XML中的依賴注入(DI):簡化Java應(yīng)用程序開發(fā)

    Spring-1-深入理解Spring XML中的依賴注入(DI):簡化Java應(yīng)用程序開發(fā)

    前兩篇文章我們介紹了什么是Spring,以及Spring的一些核心概念,并且快速快發(fā)一個Spring項目,以及詳細(xì)講解IOC,今天詳細(xì)介紹一些DI(依賴注入) 能夠配置setter方式注入屬性值 能夠配置構(gòu)造方式注入屬性值 能夠理解什么是自動裝配 思考:向一個類中傳遞數(shù)據(jù)的方式有幾種?(給類

    2024年02月13日
    瀏覽(27)
  • 在 Android Studio Java 項目里混合 Kotlin 編程

    在 Android Studio Java 項目里混合 Kotlin 編程

    首先,先搞明白一個概念,這里的 Java 混合 Kotlin 是指文件層級的混合,即 Java 代碼還是寫在 .java 文件中,Kotlin 代碼還是寫在 .kt 文件中,只不過是可以在 Java 的代碼中可以調(diào)用自己寫好的 Kotlin 類,從 Java 的角度看,它并不知道它調(diào)用的這個類是 Kotlin 寫的,這個類和平時遇

    2024年02月08日
    瀏覽(21)
  • Android 安卓開發(fā)語言kotlin與Java該如何選擇

    Android 安卓開發(fā)語言kotlin與Java該如何選擇

    ????????如今在Android開發(fā)中,應(yīng)用層開發(fā)語言主要是Java和Kotlin,Kotlin是后來加入的,主導(dǎo)的語言還是Java。kotlin的加入仿佛讓會kotlin語言的開發(fā)者更屌一些,其實不然。 ????????有人說kotlin的引入是解決開發(fā)者復(fù)雜的邏輯,并且對空指針控制的比較友好,但是我們在開

    2024年02月11日
    瀏覽(94)
  • Android的Gradle、Studio、Java、Kotlin版本兼容

    Android Gradle 插件和 Android Studio 兼容性 Android Studio 版本 所需插件版本 Hedgehog - 2023.1.1 3.2-8.2 Giraffe - 2022.3.1 3.2-8.1 Flamingo - 2022.2.1 3.2-8.0 Electric Eel - 2022.1.1 3.2-7.4 Dolphin - 2021.3.1 3.2-7.3 Chipmunk - 2021.2.1 3.2-7.2 Bumblebee - 2021.1.1 3.2-7.1 Arctic Fox - 2020.3.1 3.1-7.0 Gradle版本和Java版本對應(yīng)關(guān)系 Ja

    2024年02月09日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包