首頁  >  文章  >  後端開發  >  Yii框架官方指南系列38-定義特定狀態(Fixtures)

Yii框架官方指南系列38-定義特定狀態(Fixtures)

黄舟
黄舟原創
2017-02-15 09:43:481323瀏覽



自動測試需要被執行很多次.為了確保測試過程是可以重複的, 我們很想要在一些可知的狀態下進行測試, 這個狀態我們稱之為特定狀態. 舉個範例,在一個部落格應用程式中測試文章建立特性, 每次當我們進行測試時, 與文章相關的表(例如. Post 表, Comment 表)應該被恢復到一個特定的狀態下. PHPUnit 文檔已經很好的描述了一般的特定狀態的構建. 而本節主要介紹怎樣像剛才描述的例子那樣構建數據庫特定狀態.

設置構建數據庫的特定狀態,這恐怕是測試以數據庫為後端支持的應用最耗時的部分之一.Yii 引進的CBbFixtureManager 應用組件可以有效的減輕這一問題.當進行一組測試的時候,它基本上會做以下這些事情:

  • 在所有測試運行之前,它重置測試相關數據為可知的狀態.

  • 在單一測試運行之前, 它將特定的表重置為可知狀態.

  • 在一個測試方法執行過程中, 它提供了供給特定狀態的行資料的存取介面.

請如下使用我們在應用程式設定中設定的CDbFixtureManager.


return array(
    'components'=>array(
        'fixture'=>array(
            'class'=>'system.test.CDbFixtureManager',
        ),
    ),
);

<pre class="brush:php;toolbar:false">&lt;?php return array( &amp;#39;sample1&amp;#39;=&gt;array(         'title'=&gt;'test post 1',         'content'=&gt;'test post content 1',         'createTime'=&gt;1230952187,         'authorId'=&gt;1,     ),     'sample2'=&gt;array(         'title'=&gt;'test post 2',         'content'=&gt;'test post content 2',         'createTime'=&gt;1230952287,         'authorId'=&gt;1,     ), );</pre>資料. 這個目錄可以透過設定應用程式設定檔中的CDbFixtureManager::basePath 屬性指定為其他目錄.特定狀態資料是由多個稱為特定狀態檔案的PHP檔案組合而成.每個特定狀態檔案傳回一個陣列, 代表資料的一個特定表的初始行.檔名和表名相同.以下則是將Post

表的特定狀態資料儲存於名為

Post.php
文件裡的例子.

文件裡的例子.

正如我們所見, 上面返回了兩行資料. 每一行都表示一個數組,其鍵是表的字段名,其值則是對應的字段值.每行的索引都是稱之為

行別名的字串(例如: simple1, simple2

). 稍後當我們編寫測試腳本的時候, 我們可以方便地通過它的別名調用這行數據.我們將在下節中詳細的介紹這個.

你也許注意到了我們並未在上述特定狀態中指定

id 字段的值. 這是因為id

字段已經被定義為自增主鍵了,它的值也會在我們插入新數據的時候自動產生.

當CDbFixtureManager 第一次被引用時, 它會仔細檢查所有的特定狀態文件然後使用他們重置對應的表.它通過清空表,重置表主鍵的自增序列值,然後插入來自特定狀態檔案的資料行到表中來重置表.有時候,我們可能不想在一套測試前重置特定狀態檔案裡描述的每一個表, 因為重置太多的特定狀態檔案可能需要很多時間.這種情況下,我們可以寫一個PHP腳本來定制這個初始化過程.這個腳本應該被保存在存放特定狀態文件的目錄下,並命名為init.php.當CDbFixtureManager 檢測到了這個腳本的存在, 它將執行這個腳本而不是重置每一個表.

不喜歡使用默認方式來重置表也是可以的,例如: 清空表然後插入特定狀態數據. 如果是這種情況, 我們可以為指定的特定狀態檔案寫一個初始化腳本.這個腳本必須名稱為表名+
.init.php

. 例如: Post 表的初始化腳本檔案就是

Post.init.php
. 當CDbFixtureManager 發現了這個腳本,它將執行這個腳本而不是採用預設的方式去重置該表.

Tip:

太多的特定狀態文件大大延長了測試時間.因此, 你應該只為那些在測試中數據會發生變化的表提供特定狀態文件. 那些做為查找服務的表不會改變,因此不需要特定狀態文件.

🎜接下來兩節, 我們將談到如何在單元測試和功能測試中使用被CDbFixtureManager 管理的特定狀態.🎜🎜以上就是Yii框架官方指南系列38-定義特定狀態(Fixtures)的內容,更多相關內容請關注PHP中文網(www.php.cn)! 🎜🎜🎜🎜
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn