使用Cucumber在Android中實現行為驅動開發,你學會了嗎?
通過使用人類語言,行為驅動開發(BDD)彌合了軟件開發中技術人員和非技術人員之間的差距。
譯自Implement Behavior-Driven Development in Android With Cucumber,作者 Stephen Henry。
軟件開發涉及流程和人員。人員包括技術和非技術利益相關者,但由于流程主要是技術性的,因此它會在技術和非技術利益相關者之間造成很大的差距。
彌合這一差距需要一種協作方法,該方法使用自然語言來鼓勵技術和非技術利益相關者之間的溝通和協作。這正是行為驅動開發 (BDD)的目標:在開發人員、測試人員和業務利益相關者之間達成理解。
作為一名軟件工程師,我一直在使用最流行的工具之一Cucumber來實現 BDD。Cucumber 通過協作執行規范來幫助業務和技術團隊協作。BDD 規范還兼作自動化測試。使用 Gherkin 框架,這些規范是協作編寫的,使團隊與系統的實時文檔保持一致。
在本文中,我將解釋將 Cucumber 測試集成到Android 應用程序中的五個簡單步驟。
- 有 Java 虛擬機 (JVM) 語言。
- 它與 Espresso 框架無縫集成,用于用戶界面 (UI) 測試。
- 它使任何人都可以使用任何口語編寫所需行為的純文本描述,并使用這些描述運行自動化測試。它的純語言解析器 Gherkin 促進了這一點,因為它以客戶、利益相關者、經理、開發人員、質量保證 (QA) 測試人員等可以理解的清晰且合乎邏輯的語言指定了預期的軟件行為。
- 它提供了有關應用程序的出色文檔。
- 它可以使用 BDD 運行自動驗收測試。
使用 Cucumber 設置 Android Studio 進行測試
讓我們深入了解如何使用 Cucumber Tests 設置 Android Studio。
先決條件
在開始之前,請確保已安裝Android Studio集成開發環境 (IDE)。
您還可以考慮從 Android Studio 市場安裝以下插件:
- Cucumber 對 Kotlin 和 Android 的支持:Finanteq 提供的這個插件使得可以使用 Kotlin 編寫步驟定義來支持 Cucumber。它允許直接從 IDE 運行 Cucumber 場景作為 Android 工具化測試。
- JetBrains 的 Gherkin 和 Cucumber 支持 Java:這些插件增加了對 Gherkin 語言的支持,Cucumber 測試工具使用這種語言,并為步驟定義提供編碼輔助。
1. 創建帶有依賴項的 Android Studio 項目
在 IDE 中創建一個新的 Android Studio 項目,或使用現有項目。接下來,添加 Cucumber 依賴項。
在 app 級模塊中 build.gradle 文件中,添加以下依賴項:\
androidTestImplementation("io.cucumber:cucumber-android:7.14.0")
androidTestImplementation ("androidx.test:rules:1.6.1")
2. 創建您的 Instrumentation Runner
在 app/src/androidTest/java/com/your/app/ 中,創建一個名為 CucumberTestInstrumentation.java 的自定義 Instrumentation Runner。將此類添加到build.gradle 中的 android > defaultConfig 下:
defaultConfig {
.....
testInstrumentationRunner "com.your.app.CucumberTestInstrumentation"
}
您已成功為 Cucumber 設置 Android Studio,因此現在可以繼續進行激動人心的部分。
3. Given、When、And 和 Then
Gherkin 是一種特定于領域的語言,它使用非技術術語逐步描述功能的實現。它使用關鍵字 Given、When、And 和 Then 來解釋步驟。這些步驟可以用任何人類語言編寫,例如英語、阿拉伯語或盧奧語。
以下是我將在此項目中使用的用英語編寫的 Gherkin 特性場景示例:
Feature: Ability of the customer to login
Scenario Outline: Where the customer requests to log in
Given the login screen is displayed to the customer
When the customer enters email "<email>"
And the customer enters password "<password>"
And the customer requests to log in
Then the login status will be "<status>"
Examples:
| email | password | status |
| someemail@gmail.com | qwerty1234 | Login Failed |
| example@gmail.com | somePass02 | Login Failed |
| stevehechio@gmail.com | sayNerd001 | Login Success |
在 app/src/androidTest/assets 中創建一個 assets 目錄,并添加一個名為 features 的文件夾。您將在其中添加包含用英語編寫的上述步驟定義的功能文件。
添加一個名為 login.feature 的新 .feature 文件,并添加上述功能步驟。
4. 使用 Espresso 框架實現場景步驟
在 app/src/androidTest/java/com/your/app/ 中,創建一個名為 LoginSteps 的 Kotlin 類。您將在其中編寫測試來實現 login.feature 中的步驟。
以下是步驟實現的代碼片段:
@Given("^the login screen is displayed to the customer$")
fun theLoginScreenIsDisplayedToTheCustomer() {
composeTestRule.setContent {
LoginScreen()
}
composeTestRule.onNodeWithTag(LOGIN_SCREEN).assertIsDisplayed()
composeTestRule.onNodeWithTag(LOGIN_SCREEN_EMAIL).assertIsDisplayed()
composeTestRule.onNodeWithTag(LOGIN_SCREEN_PASSWORD).assertIsDisplayed()
composeTestRule.onNodeWithTag(LOGIN_SCREEN_BUTTON).assertIsDisplayed()
composeTestRule.mainClock.advanceTimeBy(500)
}
@When("^the customer enters email \"([^\"]*)\"$")
fun theCustomerEntersEmail(email: String) {
composeTestRule.onNodeWithTag(LOGIN_SCREEN_EMAIL).performTextInput(email)
composeTestRule.mainClock.advanceTimeBy(500)
composeTestRule.onNodeWithTag(LOGIN_SCREEN_EMAIL).assertExists().assert(hasText(email))
}
5. 提供 Cucumber 選項
運行測試時,您必須提供包含步驟定義的包,并將它們粘貼到步驟中。
在app/src/androidTest/java/com/your/app中,創建一個名為test的文件夾,并添加一個新的 Kotlin 類。
@RunWith(Cucumber::class)
@CucumberOptions(
features = ["src/androidTest/assets/features/login.feature"],
glue = ["com.stevehechio.apps.hechiobdd.LoginSteps"],
monochrome = true
)
class HechioCucumberTestRunner
最后,您可以運行測試,但首先,確認您的項目結構如下所示:
圖片
運行測試
要運行測試:
- 打開編輯配置。
- 單擊 左面板上的+,然后選擇 Android Instrumented Tests。
- 編寫名稱以匹配功能的名稱,以便于記憶。在這種情況下,即客戶登錄的能力。然后單擊運行或確定以稍后從 IDE 工具欄運行或調試它。
圖片
以下是上述實現的結果。
圖片
結論
彌合技術和非技術利益相關者之間的差距對于有效的軟件開發至關重要。行為驅動開發促進了自然語言中的協作和溝通。
Cucumber 等工具可幫助使用可執行規范作為自動化測試來實現 BDD,從而使團隊能夠創建清晰、共享的文檔。將 Cucumber 集成到您的 Android 應用程序開發中可以增強團隊協調并簡化開發。