暗夜在火星 發布於 2019/05/08 15:50
字數 1228
閱讀 516
收藏 2
點讚 0
phalapi
thinkphp
phpunit
linux foundation開源軟體大學開源技術日直播首秀即將開始,聚焦5g+aiot新藍海!>>>
在專案開發中,需要使用到thinkphp 5,為了編寫單元測試,解決了幾個難題,特此紀錄分享一下。
對於一直鍾情於自動化單元測試以及phpunit原生單元測試的我,決定對此優化一番,引入並在thinkphp 5下使用原生phpunit。
在tests目錄下,建立乙個phpunit目錄,然後建立兩個檔案:測試啟動檔案bootstrap.php和單元測試的配置檔案phpunit.xml。
<?php
// 定義應用目錄
define(「runtime_path」,dir. 「/…/…/runtime/」); //定義快取目錄
// thinkphp 引導檔案
// 載入基礎檔案
require
dir. 『/…/…/thinkphp/base.php』;
// 載入應用
// 相容舊版本的phpunit
if (!class_exists(『phpunit_framework_testcase』))
}// 手動再引入一次測試配置
// 手動引入框架和應用的函式
對於phpunit.xml配置檔案,可以這樣寫:
<?xml version="1.0" encoding="utf-8"?>
backupglobals=「false」
backupstaticattributes=「false」
colors=「true」
bootstrap="./bootstrap.php"
converterrorstoexceptions=「true」
convertnoticestoexceptions=「true」
convertwarningstoexceptions=「true」
processisolation=「false」
stoponfailure=「false」
syntaxcheck=「false」
>
name=「intl.default_locale」
value=「en」/>
name=「intl.error_level」
value=「0」/>
name=「memory_limit」
value="-1"/>
php>
name="test suite">
suffix="test.php">./directory>
testsuite>
testsuites>
processuncoveredfilesfromwhitelist="true">
whitelist>
filter>phpunit>
下面編寫乙個簡單的測試用例,試執行一下。在phpunit下建立乙個demo目錄,並建立testcaseclass.php檔案。此時結構如下:
$ tree ./phpunit
./phpunit
├── bootstrap.php
├── demo
│ └── testcaseclass.php
└── phpunit.xmltestcaseclass.php檔案**是:
<?php
usephpunit\framework\testcase;
namespace
tests
demo;
class
testcaseclass
extends
phpunit_framework_testcase
}這樣編寫成功後,就可以試執行了。
$ phpunit ./demo/testcaseclass.php
phpunit 5.7.25 by sebastian bergmann and contributors.. 1 / 1 (100%)
time: 121 ms, memory: 10.00mb
ok (1 test, 1 assertion)
後面就可以繼續這樣編寫原生的phpunit單元測試啦。
下面就要為tp5的專案**編寫單元測試了,但每次都要人工手動重複編寫測試**是一件很累人、很耗時、很低率的工作。有沒更好的技能?有!
參考我曾經編寫的指令碼工具:[phpunit]自動生成phpunit測試骨架指令碼-提供您的開發效率【2015公升級版】
現在已經成為phalapi開源框架內建的指令碼命令了。phalapi是乙個專注於介面開發的開源框架,因此我們可以把phalapi的phalapi-buildtest指令碼命令整合到thinkphp 5 的專案裡,
非常重要的鏈結
使用說明和詳細的官方文件:phalapi 2.x 單元測試
$ tree ./phpunit
./phpunit
├── bootstrap.php
├── build_test.php
├── demo
│ └── testcaseclass.php
├── phalapi-buildtest
└── phpunit.xml準備好後,就可以開始生成單元測試的**啦!
例如,可執行:
$
生成後,便可執行。
正常情況下,進行單個單元測試時,以下測試**是可以的:
public
function
testlogin
()對應的源**是:
<?php
class
site
extends
controller
但是,如果執行全部單元測試的話,傳給controller的$_post引數就失效了。這是因為thinkphp5的request是乙個單例,並且在think\request::$post變數中快取了post引數,導致後面的引數不生效。
為此,需要這樣調整傳遞引數:
public
function
testlogin
()
發現了一篇寫得很贊的文章:phpunit簡介及使用(thinkphp5的單元測試安裝及使用)
單元測試 單元測試文章收藏
前言 前段時間公司計畫做自動化測試,自己也打算圍繞幾個點做相關調研,現在想想呢?其實對自動化測試的概念都還不是十分清晰,當時主要還是圍繞 單元測試 向qa小夥伴學習了一段時間,現由於公司重組,學習中斷,這裡簡單記錄一些單元測試好文,留待後續參考.什麼叫自動化測試?自動化測試覆蓋率?覆蓋率如何做到的?...
單元測試之Django單元測試
每個應用,自帶tests.py 整合在django的專案檔案裡,更多是開發人員寫django自動的測試執行 3.1 前後置方法執行特點 django.test.testcase類主要由前 後置處理方法和test開頭的方法組成 特點 繼承於django.test.testcase 測試用例都是test...
TP5常量參考
ext 類庫檔案字尾 php think version 框架版本號ds 當前系統的目錄分隔符 think path 框架系統目錄 root path 框架應用根目錄 lib path 系統類庫目錄 預設為 think path.library core path 系統核心類庫目錄 預設為 lib ...