只執行部份測試
有時候我們可能只需要執行一部份相關的測試,來確認我們的修改不會破壞某些測試,而不需要跑完所有測試;如果有某個功能可以把這些相關測試群組起來,讓我們在執行自動測試時可以帶入參數來指定只測試這個群組,就能達到我們的目的了。
將測試加入群組
針對上述的問題, PHPUnit 提供了 @group
這個註記讓開發者可以把測試群組起來。而 @group
是可以跨檔案的, PHPUnit 會自動幫我們把這些跨檔案的測試群組起來一起測試。
以下我們將先前的 CartTest
類別與 ErrorTest
類別中的測試方法都加上群組註記:
<?php
class CartTest extends PHPUnit_Framework_TestCase
{
/**
* @dataProvider provider
* @group update
*/
public function testUpdateQuantitiesAndGetTotal($quantities, $expected)
{
// ...
}
/**
* @expectedException CartException
* @group update
* @group exception
*/
public function testUpdateQuantitiesWithException()
{
// ...
}
/**
* @group get
*/
public function testGetProducts()
{
// ...
}
<?php
class ErrorTest extends PHPUnit_Framework_TestCase
{
/**
* @expectedException PHPUnit_Framework_Error
* @group exception
*/
public function testFileWriting()
{
// ...
}
}
CartTest::testUpdateQuantitiesAndGetTotal
方法與CartTest::testUpdateQuantitiesWithException
方法為update
群組。CartTest::testUpdateQuantitiesWithException
方法與ErrorTest::testFileWriting
方法為exception
群組。CartTest::testGetProducts
方法為get
群組。
執行測試
在 phpunit
指令上加上 --group
參數就可以指定要測試的群組。另外也可以用 --exclude-group
來排除不想執行的群組。
C:\project> phpunit --group update tests
PHPUnit 4.2.5 by Sebastian Bergmann.
...
Time: 41 ms, Memory: 3.25Mb
OK (3 tests, 3 assertions)
C:\project> phpunit --group exception tests
PHPUnit 4.2.5 by Sebastian Bergmann.
..
Time: 28 ms, Memory: 3.25Mb
OK (2 tests, 2 assertions)
C:\project> phpunit --exclude-group get tests
PHPUnit 4.2.5 by Sebastian Bergmann.
....
Time: 80 ms, Memory: 3.25Mb
OK (4 tests, 4 assertions)
官方手冊參考
練習
- 思考看看群組測試可能會有什麼樣的風險?