国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > SQLite > 正文

用另一種方法來進(jìn)行Laravel數(shù)據(jù)庫測試(SQLite)

2020-03-22 17:19:48
字體:
供稿:網(wǎng)友
這篇文章主要介紹了關(guān)于用另一種方法來進(jìn)行Laravel數(shù)據(jù)庫測試(SQLite),有著一定的參考價值,現(xiàn)在分享給大家,有需要的朋友可以參考一下

Laravel數(shù)據(jù)庫測試

在測試方面,Laravel內(nèi)置使用PHPUnit提供了非常方便的解決方案。而對于數(shù)據(jù)庫增刪改查的測試,要解決的一個很重要的問題就是如何在測試完成之后,恢復(fù)數(shù)據(jù)庫的原貌,例如要測試一個用戶注冊的方法,需要插入一條用戶記錄到數(shù)據(jù)庫,但是測試完成之后,我們并不想讓這條測試用例保存在數(shù)據(jù)庫里。為了解決這個問題,Laravel提供了非常方便的方案:

使用遷移:DatabaseMigrations

使用事務(wù):DatabaseTransactions

參考資料:http://laravel.com/docs/5.3/database-testing#resetting-the-database-after-each-test另外一種解決方案:使用SQLite的內(nèi)存數(shù)據(jù)庫:memory:

Laravel提供的兩種解決方案,仍然對數(shù)據(jù)庫進(jìn)行了讀寫操作,某些時候你可能并不想這樣(例如多人共享一個線上開發(fā)數(shù)據(jù)庫),此時,還可以用一種更為優(yōu)雅的方式:SQLlite,邏輯其實也非常簡單:就是在跑測試用例的時候,將數(shù)據(jù)庫的連接替換為SQLite。

使用示例

例如我們有以下測試類(該事例并不具有代表性,僅用于說明問題,并假設(shè)本機(jī)已經(jīng)安裝SQLite):

html' target='_blank'>class HomePageTest extends TestCase { public function testHomePage()  // 創(chuàng)建一個測試用戶,并保存 $user = factory(App/User::class)- create(); $this- actingAs($user)- visit( /home )- see( Dashboard }

首先在Laravel的數(shù)據(jù)庫配置文件,即config/database.php的connections數(shù)組中添加一個新的數(shù)據(jù)庫連接

 sqlite = [ driver = sqlite , database = :memory: , prefix = ,],

這里一個非常重要的參數(shù)就是 database = :memory: ,:memory:數(shù)據(jù)庫是SQLite中內(nèi)置的一個內(nèi)存數(shù)據(jù)庫,每次運行測試用例的時候都會在內(nèi)存中創(chuàng)建一個新的數(shù)據(jù)庫,并在測試完成關(guān)閉數(shù)據(jù)庫連接后,自動清除掉,具有良好的隔離性,又因為是在內(nèi)存中的,所以速度也很快,這些特性對于測試非常方便,這也是我們選用SQLite數(shù)據(jù)庫作為測試庫的一個非常重要的原因。有關(guān)詳細(xì)解釋,點擊這里。

然后需要修改PHPUnit的配置文件,在phpunit.xml中,將數(shù)據(jù)庫連接改為剛剛定義的SQLite連接

 php  env name= APP_ENV value= testing /  env name= CACHE_DRIVER value= array /  env name= SESSION_DRIVER value= array /  env name= QUEUE_DRIVER value= sync /  !-- 將數(shù)據(jù)庫連接改為剛剛定義的SQLite連接 --  env name= DB_CONNECTION value= sqlite /  /php 

這會覆蓋.env中定義的數(shù)據(jù)庫連接DB_CONNECTION=mysql,并告訴框架在運行測試的時候,用sqlite連接代替mysql連接。

最后需要在運行測試用例之前執(zhí)行數(shù)據(jù)庫遷移,在測試類的基類,即TestCase.php中添加setUp方法

public function setUp() parent::setUp(); // 執(zhí)行數(shù)據(jù)庫遷移  $this- artisan( migrate }

這樣在每次執(zhí)行測試用例之前,都會向SQLite的:memory:數(shù)據(jù)庫中執(zhí)行所有的遷移,生成業(yè)務(wù)邏輯所需的數(shù)據(jù)表。

方案優(yōu)缺點

該方案關(guān)鍵點在于使用SQLite內(nèi)置的一個內(nèi)存數(shù)據(jù)庫:memory:,因此速度比較快,有很好的隔離性,也不會對我們的開發(fā)數(shù)據(jù)庫有任何的影響。

當(dāng)然該方案也有缺點,假如項目的數(shù)據(jù)庫龐大,有大量的數(shù)據(jù)表或者遷移文件,會消耗大量內(nèi)存,當(dāng)運行測試的時候可能會由于內(nèi)存不足,導(dǎo)致測試中斷。此時需要為PHP分配合適的內(nèi)存,在php.ini中修改配置memory_limit = 128M

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,更多相關(guān)內(nèi)容請關(guān)注PHP !

相關(guān)推薦:

如何解決Laravel.log 文件寫入的問題

Laravel開發(fā)環(huán)境部署之homestead 安裝配置過程(windows系統(tǒng))

laravel的路由(router)圖文詳解

以上就是用另一種方法來進(jìn)行Laravel數(shù)據(jù)庫測試(SQLite)的詳細(xì)內(nèi)容,PHP教程

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

上一篇:SQLite速度評測代碼

下一篇:返回列表

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 安福县| 龙岩市| 板桥市| 沈阳市| 克拉玛依市| 铁岭市| 濮阳县| 铜梁县| 诸暨市| 静乐县| 锦屏县| 建昌县| 江山市| 清远市| 达尔| 肃宁县| 梅州市| 老河口市| 都兰县| 民乐县| 涿鹿县| 和田县| 兴安县| 确山县| 蛟河市| 昭平县| 措勤县| 七台河市| 唐河县| 安塞县| 秦皇岛市| 恩施市| 松潘县| 察雅县| 舟曲县| 西吉县| 余干县| 台东县| 青冈县| 大竹县| 陵川县|