Android中使用Robolectric測試點擊事件(不需要手機)

文章目錄

  • 一、前言
  • 二、簡單示例
  • 三、參考文檔

一、前言

Robolectric 是一個由 Google 維護的開源 Android 測試框架,它允許你以 Android 運行時環境運行單元測試。
Robolectric 提供了一個模擬 Android 運行時環境,允許你測試你的代碼是否正確地使用 Android API。
所以在不依賴于手機的情況下可以對android項目進行測試。當然也可以在有手機的時候對Android項目進行測試

二、簡單示例

以下代碼源自官方文檔,并進行簡單完善。
文件位于src/app/test/下面

import android.content.Intent
import android.widget.Button
import com.example.myapplication.R
import com.example.myapplication.hilt.App
import com.example.myapplication.material.MaterialTestActivity
import com.example.myapplication.roll.PaintedScrollActivity
import junit.framework.TestCase.assertEquals
import org.junit.Test
import org.junit.runner.RunWith
import org.robolectric.Robolectric
import org.robolectric.RobolectricTestRunner
import org.robolectric.RuntimeEnvironment
import org.robolectric.Shadows.shadowOf
import org.robolectric.annotation.Config@RunWith(RobolectricTestRunner::class)
@Config(application = App::class, sdk = [28])
class RobolectricTest {//    @get:Rule
//    @JvmField
//    val executorRule = InstantTaskExecutorRule()@Testfun clickingLogin_shouldStartLoginActivity() {Robolectric.buildActivity(MaterialTestActivity::class.java).use { controller ->controller.setup() // Moves the Activity to the RESUMED stateval activity = controller.get()activity.findViewById<Button>(R.id.button).performClick()val expectedIntent = Intent(activity, PaintedScrollActivity::class.java)val actual = shadowOf(RuntimeEnvironment.getApplication()).nextStartedActivityprintln("YM----->,actual--> ${actual.component?.className}---->expectedIntent.name:${expectedIntent.component?.className}")assertEquals(expectedIntent.component, actual.component)}}}

這里需要注意的是需要添加

@Config(application = App::class, sdk = [28])

其中App是應用的Application文件。否則會有各種問題,最主要是提示不是主線程的問題。如果沒有Application的話,可以使用另外一種方式。這種方式需要添加如下依賴

testImplementation "androidx.arch.core:core-testing:2.1.0"

然后添加以下代碼

    @get:Rule@JvmFieldval executorRule = InstantTaskExecutorRule()

不過@Config也需要添加版本
@Config(sdk = [28])

三、參考文檔

  1. Robolectric 策略
  2. robolectric
  3. 構建本地單元測試

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/70904.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/70904.shtml
英文地址,請注明出處:http://en.pswp.cn/web/70904.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Spring Boot 接口 JSON 序列化優化:忽略 Null 值的九種解決方案詳解

一、針對特定接口null的處理&#xff1a; 方法一&#xff1a;使用 JsonInclude 注解 1.1 類級別&#xff1a;在接口返回的 ?DTO 類或字段? 上添加 JsonInclude 注解&#xff0c;強制忽略 null 值&#xff1a; 類級別&#xff1a;所有字段為 null 時不返回 JsonInclude(Js…

ds回答-開源llm應用開發平臺

以下是幾個著名的開源 LLM 應用開發平臺&#xff0c;涵蓋不同場景和技術特點&#xff1a; 1. Dify 特點&#xff1a;低代碼 / 無代碼開發、支持 RAG 檢索、Agent 智能體、模型管理、LLMOps 全流程優化。核心功能&#xff1a;可視化工作流編排、數百種模型兼容&#xff08;如 GP…

LDR6020 PD3.1 協議芯片在特定設備中的應用

在電子設備互聯互通的時代&#xff0c;芯片技術成為提升設備性能與功能的關鍵驅動力。LDR6020 PD3.1 協議芯片以其出色的性能&#xff0c;在 TYPE-C 臺式顯示器 / 便攜顯示器、一拖二快充線以及手機電腦轉接器等設備中展現出獨特價值&#xff0c;為用戶帶來更便捷、高效的使用體…

wzl-django學習

####################################################總的urls.py from django.contrib import admin from django.urls import path,include, re_path from django.views.static import serve from django.conf import settings from drf_yasg import openapi from drf_yas…

python -ssh學習

def exe_sshcmd(ip,username,userpswd,port,cmd): """ 功能&#xff1a;SSH登錄到指定設備&#xff0c;并執行對應的命令 入參&#xff1a;前四項為ssh登錄shell的ip和port&#xff0c;具備管理員權限的用戶名和密碼&#xff0c; cmd可以…

PDF處理控件Aspose.PDF教程:使用 Python 將 PDF 轉換為 TIFF

TIFF文件是高質量圖像的首選。它們廣泛用于印刷、存檔和圖形設計。企業通常需要轉換PDF文檔以獲得更好的兼容性。了解如何以編程方式執行此轉換可以節省時間和資源。在這篇教程中&#xff0c;我們將探討如何使用 Python 將 PDF 轉換為 TIFF。 本文涵蓋以下主題&#xff1a; P…

服務器IPMI用戶名、密碼批量檢查

背景 大規模服務器部署的時候&#xff0c;少不了較多的網管和監測平臺&#xff0c;這些平臺會去監控服務器的性能、硬件等指標參數&#xff0c;為了便于管理和控制&#xff0c;則需要給服務器IPMI帶外管理添加較多的用戶&#xff0c;這就需要對較多的服務器檢查所對應的IPMI用…

< 自用文兒 > Gobuster 暴力掃描工具與 SecLists 安全測試詞表集合

Ethice 道德問題 GFW 的保護下&#xff0c;很多的設備操作系統是停留在更老的版本&#xff0c;應用軟件也是&#xff0c;因此很多的漏洞沒有被修復。通訊沒有使用加密&#xff0c;例如網頁沒有使用 HTTPS 網站很多。幾乎是半裸的在網絡上等著被食。 不做惡是下限。 環境&…

【Cadence射頻仿真學習筆記】2.4GHz低噪放LNA仿真設計

課程分為3個部分&#xff0c; 一、LNA結構與噪聲優化方法 噪聲優化的方法是&#xff1a;限定功耗的噪聲和功率同時匹配噪聲匹配和功率匹配一般不會同時達到&#xff0c; 對于PCSNIM結構的噪聲分析&#xff0c;我們只需要了解與哪些參數有關優化思路是&#xff1a;1.信號源阻抗…

【洛谷入門賽】B4042 順序結構 202410 場

題意 給你一個變量 a a a&#xff1a;小 Y 會讓 a a a 先加 5 5 5 再把它們的和乘 3 3 3 最后輸出&#xff1b;小 L 會讓 a a a 先乘 3 3 3 再加 5 5 5 最后輸出。 要求出小 Y 和小 L 分別會輸出什么東西。 思路 這道題按照題目意思模擬就可以了&#xff0c;重點是考…

Android13修改多媒體默認音量

干就完了! 設置音量為最大音量,修改如下: /framework/base/media/java/android/media/AudioSystem.java/** hide */public static int[] DEFAULT_STREAM_VOLUME new int[] {4, // STREAM_VOICE_CALL7, // STREAM_SYSTEM5, // STREAM_RING-5, // STREAM_MUSIC15, // STREAM…

【Azure 架構師學習筆記】- Azure Databricks (13) -- 搭建Medallion Architecture part 1

本文屬于【Azure 架構師學習筆記】系列。 本文屬于【Azure Databricks】系列。 接上文 【Azure 架構師學習筆記】- Azure Databricks (12) – Medallion Architecture簡介 前言 上文已經介紹了關于Medallion的知識&#xff0c;本文開始用ADB 來實現&#xff0c; 但是基于內容較…

社交APP如何打造高粘性興趣社群

想要打造一款成功的社交 APP 興趣社群&#xff0c;關鍵在于充分激發用戶的主動分享意愿&#xff0c;同時構建起深度互動機制。與其在一開始就將大量資源投入到廣告宣傳中&#xff0c;倒不如把精力集中在深度挖掘和精心維護首批核心用戶上。例如&#xff0c;可以嘗試設計在線測試…

【操作系統】同步與互斥

同步與互斥 一、同步與互斥的概念1.1 同步與異步1.2 進程互斥 二、進程互斥的實現2.1 軟件實現2.1.1 單標志法2.1.2 雙標志先檢查法2.1.3 雙標志后檢查法2.1.4 Peterson法 2.2 硬件實現2.2.1 中斷指令2.2.2 TestAndSet指令2.2.3 Swap指令 三、互斥鎖四、信號量機制4.1 整型信號…

C++ 正則表達式分組捕獲入門指南

在 C 中&#xff0c;正則表達式&#xff08;regex&#xff09;是一種用于匹配字符串模式的強大工具。正則表達式不僅能幫助你查找符合特定模式的字符&#xff0c;還能捕獲匹配的子字符串&#xff08;即分組捕獲&#xff09;。這篇文章將介紹 C 正則表達式中的分組捕獲機制&…

使用Docker方式一鍵部署MySQL和Redis數據庫詳解

一、前言 數據庫是現代應用開發中不可或缺的一部分&#xff0c;MySQL和Redis作為兩種廣泛使用的數據庫系統&#xff0c;分別用于關系型數據庫和鍵值存儲。本文旨在通過Docker和Docker Compose的方式&#xff0c;提供一個簡潔明了的一鍵部署方案&#xff0c;確保數據庫服務的穩…

性能附錄:如何計算并發用戶數(摘自高樓老師《性能30講》)

高樓老師《性能30講》: 性能測試實戰30講-極客時間 感興趣的同學可以去讀一下&#xff0c;個人感覺寫的非常好 目錄 什么是并發? 在線用戶數、并發用戶數怎么計算 總結 什么是并發? 我們假設上圖中的這些小人是嚴格按照這個邏輯到達系統的&#xff0c;那顯然&#xff0c;…

基于yolov8的糖尿病視網膜病變嚴重程度檢測系統python源碼+pytorch模型+評估指標曲線+精美GUI界面

【算法介紹】 基于YOLOv8的糖尿病視網膜病變嚴重程度檢測系統 基于YOLOv8的糖尿病視網膜病變嚴重程度檢測系統是一款利用深度學習技術&#xff0c;專為糖尿病視網膜病變早期診斷設計的智能輔助工具。該系統采用YOLOv8目標檢測模型&#xff0c;結合經過標注和處理的醫學影像數…

學習路程八 langchin核心組件 Models補充 I/O和 Redis Cache

前序 之前了解了Models&#xff0c;Prompt&#xff0c;但有些資料又把這塊與輸出合稱為模型輸入輸出&#xff08;Model I/O&#xff09;?&#xff1a;這是與各種大語言模型進行交互的基本組件。它允許開發者管理提示&#xff08;prompt&#xff09;&#xff0c;通過通用接口調…

DeepSeek 開源狂歡周(五)正式收官|3FS并行文件系統榨干SSD

千呼萬喚始出來&#xff01;在 DeepSeek 開源周 的第五天&#xff0c;今日正式收官&#xff01;在大模型訓練中&#xff0c;每個epoch都在與存儲系統進行光速競賽——數據加載延遲會扭曲計算時空&#xff0c;KVCache訪問瓶頸將引發推理坍縮。DeepSeek開源的 3FS文件系統&#x…