PHP版本 | 原子版本 |
---|---|
5.3 -> 5.6 | 1.x -> 3.x |
7.2 -> 8.1 | 4.X -> 4.1 |
8.x | 4.1 < 4.X(目前) |
就像 SimpleTest 或 PHPUnit 一樣, atoum是一個特定於 PHP 語言的單元測試框架。然而,它從一開始就考慮到了以下想法:
可以快速實施,
簡化測試開發,
允許編寫可靠、可讀且清晰的單元測試。
為了實現這一目標,它大量使用PHP提供的功能,為開發人員提供一種編寫單元測試的全新方法。因此,它可以非常輕鬆地安裝並整合到現有專案中,因為它只是一個PHAR 存檔,這是開發人員唯一的入口點。此外,由於其流暢的介面,它允許以接近自然語言的方式編寫單元測試。由於匿名函數和閉包的智慧使用,它也使得在測試中實現存根變得更容易。 atoum本身預設在單獨的 PHP 進程中執行每個單元測試,以確保隔離。當然,它可以無縫地用於持續集成,考慮到它的設計,它可以非常輕鬆地應對特定需求。 atoum還可以在不影響效能的情況下完成所有這些,因為它的開發目的是減少記憶體佔用,同時允許加速測試執行。它還可以產生Xunit格式的單元測試執行報告,這使得它與Jenkins等持續整合工具相容。 atoum還產生程式碼覆蓋率報告,以便可以監督單元測試。最後,儘管它主要是在 UNIX 上開發的,但它也可以在 Windows 上運行。
atoum確實很容易安裝:從 github 克隆它,下載它的 PHAR 或簡單地使用 Composer,
atoum透過將每個測試方法隔離在自己的 PHP 流程中,在測試執行期間提供高水準的安全性。當然,這個功能是開箱即用的,不需要安裝任何額外的擴展,
atoum在平行環境中運行測試,利用當今的多核心 CPU,使套件盡可能快地運行,
atoum提供了一組功能齊全的自然且富有表現力的斷言,使測試盡可能具有可讀性。這是一個例子:
<?php$this->整數(150) ->大於(100) ->低於或等於(200) ;
atoum支援帶有大量結構關鍵字的類似 BDD 的語法:
<?php$this->given($testedInstance = 新的testedClass()) ->and($testedClass[] = $firstValue = uniqid()) ->然後->sizeof($testedInstance)->isEqualTo(1) ->string($testedClass[0])->isEqualTo($firstValue) ;
atoum提供了一個非常簡單但非常強大的模擬引擎:
<?php$this->given($testedInstance = 新的testedClass()) ->and($aMock = new mockfoobar()) // 這裡動態建立了 foobar 類別的模擬 ->and($this->calling($aMock)->doOtherThing = true) // 每次呼叫 doOtherThing( ) 實例將會傳回true->and($testedInstance->setDependency($aMock)) ->然後->boolean($testedInstance->doSomething())->isTrue() -> 模擬($aMock) ->call('doOtherThing')->withArguments($testedInstance)->once() // 斷言 $aMock 的 doOtherThing() 方法被呼叫一次;
atoum提供了一個清晰的 API 來斷言異常:
<?php$this->given($testedInstance = 新的testedClass()) ->and($aMock = new mockfoobar()) // 這裡動態建立了 foobar 類別的模擬->and($this->calling($aMock)->doOtherThing->throw = $exception = new exception( )) // 呼叫doOtherThing() 會拋出例外->and($testedInstance->setDependency($aMock)) ->然後->異常(function() use ($testedInstance) { $testedInstance->doSomething(); }) ->isIdenticalTo($異常) ;
atoum還允許您模擬本機 PHP 函數。同樣,這是開箱即用的:
<?php$this->given($this->function->session_start = false) ->and($session = 新的testedClass()) ->然後->異常(function () use ($session) { $session->start(); }) ->isInstanceOf('projectnamespaceexception') ->hasMessage('無法啟動會話') ->function('session_start')->wasCalled()->once() ;
atoum能夠產生多種報告,例如 TAP、clover、xUnit,以便輕鬆與 Jenkins 或任何其他持續集成工具集成,
atoum支持數據提供者,
atoum測試支援自動執行:只需包含atoum執行程式並使用php path/to/test/file.php
啟動測試,
atoum的設定檔完全以 PHP 編寫(無 XML、YAML 或任何其他格式),為您提供最佳的靈活性:
<?php$script->addDefaultArguments('--test-it', '-ncc');$runner->addTestsFromDirectory(__DIR__ . '/tests/units/classes');$testGenerator = new atoumatoumtestgenerator();$ testGenerator->setTestClassesDirectory(__DIR__ . '/tests/units/classes'); ->setTestClassNamespace('atoumatoumtestsunits'); ->setTestedClassesDirectory(__DIR__ . '/classes'); ->setTestedClassNamespace('atoumatoum') ->setRunnerPath(__DIR__ . '/scripts/runner.php') ;$runner->setTestGenerator($testGenerator);
atoum提供了一個自動測試模板產生器,
atoum提供了一個循環模式來輕鬆重新觸發失敗的測試,
atoum還充滿了其他有趣的功能,隨著時間的推移,您會發現這些功能。
atoum絕對需要PHP >= 5.6.0
或更高版本才能運作。在 UNIX 上,為了檢查您是否擁有正確的 PHP 版本,您只需在終端機中執行以下命令:
$ php -v | php grep -oE 'php 5.3.(?:[3-9]|[1-9][0-9])|5.[4-6].[0-9]+|[5-8].[ 0-9]+。
如果顯示PHP 5.6.x
或同等版本,則表示您安裝了正確的 PHP 版本。如果您想使用Atoum的 PHAR 存檔,您還需要 PHP 能夠存取phar
模組,該模組通常預設可用。在 UNIX 上,要檢查是否有此模組,只需在終端機中執行以下命令:
$ php -m | grep -i phar
如果顯示Phar
或同等內容,則模組已正確安裝。產生 Xunit 格式的報告需要xml
模組。在 UNIX 上,要檢查是否有此模組,只需在終端機中執行以下命令:
$ php -m | grep -i xml
如果顯示Xml
或等效內容,則模組已正確安裝。如果您希望透過單元測試監控程式碼的覆蓋率,則需要 Xdebug 2.3 模組。在 UNIX 上,要檢查是否有此模組,只需在終端機中執行以下命令:
$ php -v | php grep -oi 'xdebug'
如果顯示Xdebug
或同等內容,則模組已正確安裝。
您只需下載其 PHAR 檔案並將其儲存在您想要的位置,例如/path/to/project/tests/atoum.phar
下方。該 PHAR 存檔包含通過atoum全部單元測試的最新開發版本。 atoum的原始程式碼也可以透過 GitHub 儲存庫取得。要檢查atoum是否可以在您的配置下正常工作,您可以執行其所有單元測試。為此,您只需在終端機中執行以下命令:
$ php atoum.phar --測試它
使用您喜歡的文字編輯器,建立檔案path/to/project/tests/units/helloWorld.php
並新增以下程式碼:
<?phpnamespacevendorprojecttestsunits;require_once'path/to/atoum.phar';include_once'path/to/project/classes/helloWorld.php';use atoumatoum;usevendorproject;class helloWorldatoumtest {公共函數testSay() {$helloWorld = new projecthelloWorld();$this->string($helloWorld->say())->isEqualTo('Hello World!'); } }
啟動終端機並執行以下命令:
$ php 路徑/到/測試/檔案[輸入]
您應該得到以下結果或等效結果:
> 原子版本 XXX,作者:Frédéric Hardy。 錯誤:無人參與的異常:測試類別“vendorprojecttestsunitshelloWorld”不存在測試類別“vendorprojecthelloWorld”
再次使用您喜歡的文字編輯器,建立檔案path/to/project/classes/helloWorld.php
並新增以下程式碼:
<?php命名空間vendorproject;class helloWorld {公共函數說() {return '你好世界! } }
在同一終端機中,再次執行以下命令:
$ php 路徑/到/測試/檔案[輸入]
您應該得到以下結果或等效結果:
> Atoum 版本 288,作者:Frédéric Hardy。 [S_______________________________________________________________][1/1] => 測試持續時間:0.00 秒。 => 記憶體使用量:0.25 Mb。 、1 個方法、2 個斷言,0 個錯誤,0 個異常)!
<?phpnamespacevendorprojecttestsunits;require_once'path/to/atoum.phar';include_once'path/to/project/classes/helloWorld.php';use atoumatoum;usevendorproject;class helloWorldatoumtest {公共函數test__construct() {$helloWorld = new projecthelloWorld();$this->string($helloWorld->say())->isEqualTo('你好!') ->string($helloWorld->say($name = 'Frédéric Hardy'))->isEqualTo('Hello ' . $name . '!') ; } }
atoum的文檔仍在編寫中。任何改進它的幫助將不勝感激。但是,如果您想立即進一步探索atoum的可能性,我們建議:
在終端機中執行指令php atoum.phar -h
或指令php scripts/runner.php -h
,
探索atoum原始碼中的configurations
目錄的內容,因為它包含設定檔範例,
探索atoum原始碼中的tests/unit/classes
目錄的內容,因為它包含所有單元測試,
閱讀有關它的(法語)會議幻燈片,可在線獲取,
閱讀(法語)維基,
加入討論頻道,
透過電子郵件提問,地址為support[AT]atoum(DOT)org 。
在這種情況下,您要做的第一件事是確認您是否擁有最新版本的存檔。您只需重新下載即可。如果仍然不起作用,請在終端機視窗中執行以下命令:
$ php -n atoum.phar -v
如果您獲得atoum的版本號,則問題出在您的 PHP 配置上。在大多數情況下,原因可能是在擴充內,這可能與 PHAR 格式不相容,或會阻止執行 PHAR 存檔作為安全措施。例如, ioncube
擴充似乎與 PHAR 檔案不相容,因此,如果您正在使用它,則必須透過在php.ini
中註解以下行並在其前面加上 ; 來停用它;
特點:
zend_extension = /path/to/ioncube_loader*.*
suhosin
擴充功能會阻止執行 PHAR 檔案,因此必須修改其預設配置才能使用atoum ,方法是在php.ini
檔案中新增以下行:
suhosin.executor.include.whitelist="phar"
最後,如果執行atoum導致螢幕顯示類似???%
字符,這可能是因為php.ini
檔案中的detect_unicode
指令設定為 1 php.ini
使用以下命令運行atoum :
$ php -d detector_unicode=0 atoum.phar [選項]
如果這三個操作不允許atoum工作,我們建議您發送一封電子郵件到地址support[AT]atoum(DOT)org ,詳細描述您的配置和您的問題。您也可以在atom儲存庫的討論頻道上向atom開發人員尋求協助。
__COMPILER_HALT_OFFSET__
已定義/path/to/atoum.phar
此錯誤是由於使用include
或require
將atoum PHAR 存檔包含在程式碼中的多個位置這一事實造成的。要解決此問題,您只需使用include_once
或require_once
來包含存檔,以確保它不會被多次包含。
APC 是一個免費、開放且強大的框架,用於快取和優化以 PHP 擴充形式分發的 PHP 中間程式碼。當測試使用 APC 的類別時,您可能會收到一些失敗訊息,顯示apc_fetch
函數無法檢索值。與所有 PHP 擴充功能一樣,APC 有一些配置選項來啟用它:
apc.enabled
是否啟用或停用APC,
apc.enable_cli
,是否為 PHP CLI 啟用或停用 APC。
為了將 APC 與atoum一起使用,您必須將apc.enabled
和apc.enable_cli
設為1
,否則,將不會為atoum使用的 PHP CLI 版本啟用它。
當使用atoum和模擬物件時,有時會遇到來自 PHP 的段落錯誤。這些段錯誤是由版本低於 2.1.0 的 XDebug 引起的,該版本在某些情況下處理反射時存在問題。若要檢查 XDebug 的目前版本,可以執行php -v
。要解決此問題,您必須將 XDebug 更新到最新的穩定版本。如果您無法更新系統上的 XDebug,您仍然可以停用該擴充功能以避免出現段錯誤。若要確保 XDebug 已成功更新或停用,您可以執行php -v
。完成更新或停用 XDebug 後,執行php atoum.phar --test-it
以確保所有段錯誤均已消失並且atoum正在工作。
正在尋找路線圖?
這是正在進行的工作,
下一個版本中將會出現這些內容。
原子是由弗雷德里克·哈代 (Frédéric Hardy) 創建的。它現在由強大的貢獻者社區領導。您可以在提交者清單或貢獻者團隊中找到他們。
atoum 是根據 BSD-3-Clause 許可證發布的。有關詳細信息,請參閱捆綁的許可證文件。