精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Android O 遷移測試:Room

企業動態
在之前的一篇文章中,我們介紹了一下構件組件,其中就提到了使用 Room 來進行數據庫操作。以下是您需要了解的有關 Room 遷移測試的內容。

之前的一篇文章中,我們介紹了一下構件組件,其中就提到了使用 Room 來進行數據庫操作。但我們也有注意到,如果您錯誤地實施遷移,最嚴重的結果可能會導致您的應用崩潰或丟失用戶數據。

[[204036]]

除此之外,Migration.migrate 在編譯時不會檢查在方法中執行的 SQL 語句,這導致了更多的問題。了解到這個情況之后,對遷移進行測試就成了一項必做任務。 Room 提供了 MigrationTestHelper 測試工具,這一工具允許您:

  • 在給定的版本中創建一個數據庫
  • 在數據庫上運行一組給定的遷移
  • 驗證數據庫 schema

當然,Room 不會驗證數據庫中的數據本身。這是您需要親自去實現的東西。

以下是您需要了解的有關 Room 遷移測試的內容。

工作原理

[[204037]]

為了進行遷移測試,Room 需要知道您當前數據庫版本的幾個要素:版本號、Entity、Identity Hash,以及為創建和更新 room_master_table 而做出的查詢請求。所有這些都由 Room 在編譯時自動生成,并存儲在schema JSON 文件中。

在 build.gradle 文件中指定一個文件夾,來放置這些生成的 schema JSON 文件。在更新 schema 時,最終會出現一些 JSON 文件,每個版本都將有一個對應的文件。確保將每個生成的文件提交給源代碼管理工具。下次再次增加版本號碼時,Room 可以使用 JSON 文件進行測試。

先決條件

要生成 JSON 文件,請使用以下內容更新 build.gradle 文件:

1. 定義 schema 位置

  1. defaultConfig { 
  2.   javaCompileOptions { 
  3.             annotationProcessorOptions { 
  4.                 arguments = ["room.schemaLocation":  
  5.                                 "$projectDir/schemas".toString()] 
  6.             } 
  7.         } 

2. 將 schema 位置添加到源碼目錄

  1. android { 
  2.      
  3.     sourceSets { 
  4.         androidTest.assets.srcDirs +=   
  5.                            files("$projectDir/schemas".toString()) 
  6.     } 

3. 將 Room 測試庫添加到依賴列表中

  1. dependencies { 
  2. androidTestImplementation     
  3.                 “android.arch.persistence.room:testing:1.0.0-alpha5” 

遷移測試規則

創建數據庫和 schema,打開和關閉數據庫,運行遷移 —— 您幾乎需要為每個測試編寫大量這樣的樣板代碼。為了避免過度重復勞動,請在遷移測試類中使用 MigrationTestHelper 測試工具。

為了創建數據庫以及驗證遷移,MigrationTestHelper 很大程度上依賴于生成的 JSON 文件。

  1. @Rule 
  2. public MigrationTestHelper testHelper = 
  3.         new MigrationTestHelper( 
  4.                 InstrumentationRegistry.getInstrumentation(), 
  5.                 <your_database_class>.class.getCanonicalName(), 
  6.                 new FrameworkSQLiteOpenHelperFactory() 

您可以在特定版本中創建數據庫:

  1. // Create the database with version 2 
  2. SupportSQLiteDatabase db =  
  3.                          testHelper.createDatabase(TEST 

您可以運行一組遷移,并自動驗證 schema 是否更新無誤:

  1. db = testHelper.runMigrationsAndValidate(TEST_DB_NAME, 4, validateDroppe 

實施測試

測試策略很簡單:

  1. 在特定版本中打開數據庫;
  2. 插入一些數據;
  3. 運行遷移并驗證 schema;
  4. 檢查數據庫中是否有正確的數據。

例如,數據庫的版本 3 添加了一個新列:date 。因此,當測試從版本 2 到版本 3 的遷移時,我們檢查插入到版本 2 的數據的有效性,也是我們新列的默認值。我們的 AndroidJUnitTest 看起來是這樣的:

  1. @Test 
  2. public void migrationFrom2To3_containsCorrectData() throws  
  3.                                                        IOException { 
  4.     // Create the database in version 2 
  5.     SupportSQLiteDatabase db =  
  6.                          testHelper.createDatabase(TEST_DB_NAME, 2); 
  7.     // Insert some data 
  8.     insertUser(USER.getId(), USER.getUserName(), db); 
  9.     //Prepare for the next version 
  10.     db.close(); 
  11.  
  12.     // Re-open the database with version 3 and provide MIGRATION_1_2   
  13.     // and MIGRATION_2_3 as the migration process. 
  14.     testHelper.runMigrationsAndValidate(TEST_DB_NAME, 3,    
  15.               validateDroppedTables, MIGRATION_1_2, MIGRATION_2_3); 
  16.  
  17.     // MigrationTestHelper automatically verifies the schema   
  18.     //changes, but not the data validity 
  19.     // Validate that the data was migrated properly. 
  20.     User dbUser = getMigratedRoomDatabase().userDao().getUser(); 
  21.     assertEquals(dbUser.getId(), USER.getId()); 
  22.     assertEquals(dbUser.getUserName(), USER.getUserName()); 
  23.     // The date was missing in version 2, so it should be null in  
  24.     //version 3 
  25.     assertEquals(dbUser.getDate(), null); 

測試從 SQLiteDatabase 到 Room 的遷移

從標準 SQLiteDatabase 到 Room 的步驟雖然乍一看很直觀,但我們覺得有必要詳細介紹如何測試遷移實現。

因為原本的數據庫沒有使用 Room 實現,自然我們就沒有相應的 JSON 文件,因此我們無法使用 MigrationTestHelper 創建數據庫。

我們需要這么做:

  1. 擴展 SQLiteOpenHelper 類,并在 onCreate 執行創建數據庫表的 SQL 查詢操作;
  2. 在 @Before 測試方法中,創建數據庫;
  3. 在 @After 測試方法中,清除數據庫;
  4. 使用 SQLiteOpenHelper ,來插入測試所需的數據,檢查從SQLiteDatabase 版本遷移到使用 Room 的版本;
  5. 使用 MigrationTestHelper 運行遷移和驗證 schema;
  6. 檢查數據庫數據的有效性。

數據庫版本 1 使用 SQLiteDatabase 實現,然后在版本 2 中,我們遷移到了 Room,而在版本 3 中,我們添加了一個新的列。檢查從版本 1 到 3 的遷移測試如下所示:

  1. @Test 
  2. public void migrationFrom1To3_containsCorrectData() throws IOException { 
  3.     // Create the database with the initial version 1 schema and     
  4.     //insert a user 
  5.     SqliteDatabaseTestHelper.insertUser(1, USER.getUserName(), sqliteTestDbHelper); 
  6.  
  7.     // Re-open the database with version 3 and provide MIGRATION_1_2  
  8.     // and MIGRATION_2_3 as the migration process. 
  9.     testHelper.runMigrationsAndValidate(TEST_DB_NAME, 3, true, 
  10.             MIGRATION_1_2, MIGRATION_2_3); 
  11.  
  12.     // Get the latest, migrated, version of the database 
  13.     // Check that the correct data is in the database 
  14.     User dbUser = getMigratedRoomDatabase().userDao().getUser(); 
  15.     assertEquals(dbUser.getId(), 1); 
  16.     assertEquals(dbUser.getUserName(), USER.getUserName()); 
  17.     // The date was missing in version 2, so it should be null in    
  18.     //version 3 
  19.     assertEquals(dbUser.getDate(), null); 

挽起袖子試試吧!

[[204038]]

這里有一個示例 App:

https://github.com/googlesamples/android-architecture-components/tree/master/PersistenceMigrationsSample

您可以在此示例應用中查看實現。為了簡化比較,每個數據庫版本都是以自己的風格實現的,相信看完之后您已經能玩轉典型的遷移路徑了:

  1. sqlite:使用 SQLiteOpenHelper 和傳統的 SQLite 界面;
  2. room :使用 Room 替換實現,并提供到版本 2 的遷移;
  3. room2:將數據庫更新為新 schema,版本 3;
  4. room3: 將數據庫更新為新的版本 4。提供從版本 2 到 3,版本 3 到 4,以及版本 1 到 4 的遷移路徑。

使用 Room,您可以很容易地實施和測試遷移。MigrationTestHelper 允許您在任何版本打開數據庫、運行遷移,并且只需幾行代碼就可以驗證 schema。

【本文是51CTO專欄機構“谷歌開發者”的原創稿件,轉載請聯系原作者(微信公眾號:Google_Developers)】

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2017-06-30 09:36:10

Android OAPI兼容

2015-08-28 09:12:44

云測O2O

2022-12-29 08:57:34

Android本地數據存儲

2022-01-19 12:23:36

云遷移云端

2019-03-25 12:20:29

數據MySQL性能測試

2025-06-10 08:15:00

LLM大語言模測試

2017-09-18 10:26:05

Android OAndroid應用安裝

2013-05-09 10:51:44

2011-12-14 10:06:55

UnixLinux服務器

2025-07-14 00:20:00

2017-08-16 14:08:46

Android O圖標視覺

2013-01-15 13:28:24

盈利模式移動互聯網O2O

2015-10-15 09:57:08

光合資本

2025-04-09 08:21:10

2014-06-13 11:25:04

Android 5.0

2017-09-18 22:55:46

GoogleAndroidRTDB

2013-01-15 13:59:14

2013O2O細分領域

2011-12-14 09:46:14

LinuxUnix遷移

2015-10-15 17:44:15

O2O

2015-01-26 16:02:02

O2O世博會
點贊
收藏

51CTO技術棧公眾號

亚洲精品成人| 免费看啪啪网站| 久久亚洲中文字幕无码| 久草热在线观看| 哺乳挤奶一区二区三区免费看| 国产亚洲婷婷免费| 欧美高清videos高潮hd| 性欧美精品一区二区三区在线播放 | 国产又粗又长免费视频| 欧美性video| 天天操夜夜操国产精品| 色94色欧美sute亚洲线路二| 国产精品一区二区三区观看| 在线看的片片片免费| 国产福利亚洲| 国产日韩欧美一区二区三区综合| 成人精品视频在线| 国产又粗又猛又爽又黄的视频四季| 91亚洲精品在看在线观看高清| 国产亚洲欧美一级| 99久久综合狠狠综合久久止 | 综合伊思人在钱三区| 国产精品美女久久久久高潮| 国产第一区电影| mm131丰满少妇人体欣赏图| 中文不卡1区2区3区| 97久久精品人人澡人人爽| 性欧美长视频免费观看不卡| 国产麻豆剧传媒精品国产| 涩爱av在线播放一区二区| 亚洲a级精品| 日韩一区二区三区四区| 在线免费观看成人网| 亚洲精品无码久久久| 欧美激情偷拍自拍| 一本大道综合伊人精品热热| 亚洲va男人天堂| 中文天堂资源在线| 午夜影视一区二区三区| 国产精品久久久久久久裸模| 欧美在线视频观看| 久久久国产精品无码| 黄色精品免费看| 男人的天堂久久精品| 亚洲天堂av综合网| 国产精品沙发午睡系列| www.天天干.com| 午夜精品毛片| 亚洲免费av网址| 福利视频免费在线观看| 亚洲 小说区 图片区| 天天做天天爱综合| 在线观看欧美日韩| 日韩免费高清在线| 成人动漫在线免费观看| 久久国产精品亚洲77777| 亚洲电影免费观看高清完整版在线| 午夜久久久久久久久久久| 亚洲一区二区人妻| 欧美3p在线观看| 亚洲人午夜色婷婷| 最新在线黄色网址| 粉嫩久久久久久久极品| 一个色在线综合| 国产乱人伦精品一区二区| 国产黄色片网站| 亚洲成人资源| 亚洲四色影视在线观看| 在线视频 日韩| 51av在线| av电影天堂一区二区在线| 久久久久久久一区二区| xxxwww国产| 樱花草涩涩www在线播放| 一区二区三区四区亚洲| 91视频婷婷| 亚洲国产成人无码av在线| 国产精品2023| 欧美刺激午夜性久久久久久久| 日本a级片在线观看| 国产高清一区二区三区视频| 国产99久久久国产精品潘金网站| 久久久久久国产精品久久| 特一级黄色录像| 久久久久久久久99精品大| xxxx欧美18另类的高清| 亚洲成人激情小说| 欧美美女日韩| 一区二区三区精品视频在线| 色综合久久久久久久久五月| 秋霞成人影院| eeuss鲁片一区二区三区在线观看| 亚洲最大成人在线| 亚洲美女福利视频| 免费人成精品欧美精品 | 中文字幕这里只有精品| 久久精品免费在线观看| 任我爽在线视频精品一| 国产美女无遮挡永久免费| 黄色欧美成人| 97视频免费在线看| 日韩美一区二区| 久久99精品久久久久久国产越南| 日韩中文字幕欧美| 日韩va亚洲va欧美va清高| 欧美影院天天5g天天爽| 欧美一级理论片| 国产精品扒开腿做爽爽爽a片唱戏 亚洲av成人精品一区二区三区 | 国产农村妇女毛片精品久久麻豆| 国产精品高潮呻吟久久av黑人| www.99re7| 国产视频欧美| 国产精品日日做人人爱| 精品区在线观看| 91免费视频观看| 亚洲激情一区二区| 国产乱码在线| 欧美性生交片4| 成人av一级片| 台湾天天综合人成在线| 精品免费99久久| 玖玖爱视频在线| 亚洲成人不卡| 欧美成人一级视频| av在线播放中文字幕| 1024日韩| 欧美精品免费看| 91高清免费看| 亚洲永久字幕| 欧美在线视频a| www日本高清视频| 国产精品午夜在线观看| 日本福利视频在线| 黄色动漫在线| 一本一道久久a久久精品综合蜜臀| 小早川怜子一区二区三区| 一区二区精彩视频| 伊人久久综合97精品| 精品97人妻无码中文永久在线| 国产精品国产三级国产在线观看| 性日韩欧美在线视频| 国内毛片毛片毛片毛片| 中文字幕第一区综合| 国产在线精品91| 综合激情网...| 中文字幕不卡av| 日本少妇毛茸茸高潮| 狠狠爱综合网| 成人av.网址在线网站| 国产一区二区影视| 白白色 亚洲乱淫| 一区二区不卡在线观看| 精品麻豆一区二区三区| 欧洲一区二区三区在线| 懂色av粉嫩av蜜乳av| 亚洲视频狠狠| 成人动漫在线观看视频| av免费在线观看网址| 欧美国产激情一区二区三区蜜月| 亚洲人成无码网站久久99热国产| 国产美女高潮在线观看| 欧美性猛交xxxx乱大交3| 怡红院一区二区| 欧美日本久久| aaa级精品久久久国产片| 国产黄色在线免费观看| 欧美日韩精品欧美日韩精品 | 久久在线观看免费| 蜜桃狠狠色伊人亚洲综合网站| 久青青在线观看视频国产| 婷婷久久综合九色综合绿巨人| 少妇献身老头系列| 雨宫琴音一区二区在线| 国产精品毛片va一区二区三区| 女同视频在线观看| 日韩精品中文字幕在线一区| 一级片一级片一级片| 国产成人精品午夜视频免费| 国产欧美综合精品一区二区| 国产在线视频网| 亚洲国产成人tv| 亚洲国产精品无码久久久久高潮 | 国产精品一区二区三区99| 国产中文字幕亚洲| 免费观看成年人视频| 国产亚洲短视频| 日本激情视频在线| 久久精品高清| 91青草视频久久| 欧美理论电影| 欧美日韩一区 二区 三区 久久精品 | 国产人妻人伦精品1国产丝袜| 国产日韩欧美一区在线 | 人妻一区二区三区四区| 欧美性生交大片免网| www.av天天| 久久电影网电视剧免费观看| 大陆极品少妇内射aaaaaa| 精品少妇一区| 国产精品久久久久久久久久久久久久 | 欧美日韩和欧美的一区二区| www.xxxx日本| 97国产精品videossex| 男女污污的视频| 国产精品久久久久久av公交车| 免费97视频在线精品国自产拍| 亚洲精品国产片| 色乱码一区二区三区88| 欧美亚洲日本在线| 91在线porny国产在线看| 高清av免费看| 亚洲精选91| 在线码字幕一区| 香蕉国产成人午夜av影院| 精品国产网站地址| 天天插天天干天天操| 欧美日韩一区国产| 日本污视频在线观看| 中文字幕精品综合| 国产 xxxx| 日本美女一区二区三区| 亚洲 高清 成人 动漫| 国产韩日影视精品| 免费成人看片网址| 色播一区二区| 精品国产一区av| 亚洲欧美自偷自拍| 精品人伦一区二区三区蜜桃网站| 男女男精品视频网站| 91在线看国产| 中文字幕一二三区| 蜜臀91精品一区二区三区| 无码人妻丰满熟妇区96| 亚洲天天综合| 国产精品欧美激情| 97人人爽人人澡人人精品| 最近2019中文免费高清视频观看www99| 婷婷亚洲一区二区三区| 国产精品国产三级国产普通话蜜臀 | 不卡的电视剧免费网站有什么| 国产wwwxx| 亚洲综合激情| 福利在线一区二区| 亚州av乱码久久精品蜜桃| 欧美日韩一区在线播放 | 欧美色爱综合网| youjizz在线视频| 亚洲777理论| 中文视频在线观看| 国产九色精品成人porny| 在线观看的毛片| 日韩主播视频在线| 老太脱裤子让老头玩xxxxx| 好看的av在线不卡观看| 小泽玛利亚av在线| 综合一区av| 老司机午夜网站| 围产精品久久久久久久| 亚洲国产婷婷香蕉久久久久久99| 国产99久久| 欧美日本韩国在线| 亚洲人成精品久久久| 精品视频第一区| 色豆豆成人网| 国产成人a亚洲精品| 91九色国产在线播放| 日韩亚洲欧美中文高清在线| 午夜在线观看视频| 色七七影院综合| 黄页视频在线播放| 久久69精品久久久久久国产越南| 色欲av永久无码精品无码蜜桃| 日韩午夜激情免费电影| 精品国自产拍在线观看| 日韩欧美一级二级三级久久久 | 日韩欧美在线123| 亚洲AV无码乱码国产精品牛牛| 日韩女同互慰一区二区| 国产成人麻豆精品午夜在线| 亚洲精品一区在线观看| 凸凹人妻人人澡人人添| 亚洲美女在线观看| 国产人成在线观看| 精品国产拍在线观看| 污片在线免费观看| 日韩精品免费在线播放| 日韩有码电影| 国产一区二区日韩精品欧美精品| www.日日夜夜| 亚洲国产日韩欧美在线动漫| 中文人妻熟女乱又乱精品| 在线观看精品一区| 国产又大又长又粗| 欧美日韩亚洲精品内裤| 欧美一区免费看| 欧美日韩成人综合| 午夜久久久久久噜噜噜噜| 亚洲第一中文字幕| 亚洲欧洲成人在线| 久久久国产精彩视频美女艺术照福利| 国产调教视频在线观看| 97在线观看免费高清| 国产成人免费| 超碰97人人人人人蜜桃| 亚洲精华一区二区三区| 日日噜噜噜噜夜夜爽亚洲精品| 欧美一区二区性| 国产精品国产三级欧美二区| 亚洲成人影音| 奇米视频888战线精品播放| 久久免费大视频| 欧美一级视频免费看| 奇米在线7777在线精品| 免费啪视频在线观看| 久久久电影一区二区三区| 女同性恋一区二区三区| 亚洲国产高清在线观看视频| 久久久久久久久艹| 亚洲精品久久久蜜桃| 国产精品人人人人| 日韩一级黄色大片| 青春草在线观看| 欧美激情a在线| 国产成人精选| 久中文字幕一区| 欧美伊人久久| 亚洲 激情 在线| 91视频在线看| 免费中文字幕在线观看| 欧美天堂一区二区三区| 国产在线不卡av| 中文字幕资源网在线观看免费 | 亚洲熟女乱综合一区二区三区| 国产女人水真多18毛片18精品视频 | 美女国产在线| 国产suv精品一区二区三区88区| 国产精品一区二区精品视频观看 | 国产成人精品av在线观| 正在播放国产一区| 樱桃视频成人在线观看| 99超碰麻豆| 成人高清电影网站| 91九色丨porny丨国产jk| 久久99久久99小草精品免视看| 日本丰满少妇裸体自慰 | 日本午夜精品理论片a级app发布| 欧美日韩精品是欧美日韩精品| 伦理片一区二区三区| 久久青草福利网站| 日本在线一区二区三区| 亚洲一区二区在线免费观看| 美女网站久久| 性欧美丰满熟妇xxxx性久久久| 亚洲国产精品一区二区www在线| 国产精品欧美亚洲| 日韩在线观看成人| 欧美日韩视频免费看| 视频一区二区在线观看| 国产精品久久久久毛片大屁完整版| 亚欧美一区二区三区| 蜜臀久久99精品久久久画质超高清| 一本加勒比波多野结衣| 亚洲午夜精品在线| 人妻无码一区二区三区久久99| 91国产美女在线观看| 欧美激情极品| 国产免费黄色av| 91免费版在线看| 日韩 欧美 综合| 亚洲精品美女免费| 最新中文字幕在线播放| 看欧美日韩国产| 葵司免费一区二区三区四区五区| 久久发布国产伦子伦精品| 国产精品成人午夜| а√天堂资源在线| 久久久久久成人精品| 欧美一级全黄| 黄色av免费在线播放| 国产日韩欧美一区二区三区综合| 亚洲精品国产精品乱码视色| 日韩视频―中文字幕| 国产精品igao视频网网址不卡日韩| 桥本有菜av在线| 好看的日韩av电影| 在线免费看黄色片| 黑人精品xxx一区一二区| 免费人成在线观看网站| 欧洲成人免费视频| 懂色av中文在线| 亚洲激情男女视频| 熟妇高潮一区二区高潮| 日本中文字幕久久看| 色喇叭免费久久综合| 亚洲精品乱码久久久久久动漫| 亚洲夂夂婷婷色拍ww47| 欧洲天堂在线观看| 国产精品91在线| 欧美在线首页| 搡老熟女老女人一区二区|