phpunit單元測試

技術小美發表於2017-11-08

1、ubuntu12.04安裝

1
2
3
wget https://phar.phpunit.de/phpunit.phar
chmod +x phpunit.phar
mv phpunit.phar /usr/local/bin/phpunit

2、測試案例phpunit1.php(測試的依賴關係)

展示如何用@depends標註來表達測試方法之間的依賴關係

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
class StackTest extends PHPUnit_Framework_TestCase
{
public function testEmpty()
{
$stack array();
$this->assertEmpty($stack);
 
return $stack;
}
 
/**
* @depends testEmpty
*/
public function testPush(array $stack)
{
array_push($stack`foo`);
$this->assertEquals(`foo`$stack[count($stack)-1]);
$this->assertNotEmpty($stack);
 
return $stack;
}
 
/**
* @depends testPush
*/
public function testPop(array $stack)
{
$this->assertEquals(`foo`array_pop($stack));
$this->assertEmpty($stack);
}
}

3、測試結果

1
2
3
4
5
phpunit phpunit1.php
PHPUnit 3.7.27 by Sebastian Bergmann.
...
Time: 4 ms, Memory: 4.25Mb
OK (3 tests, 5 assertions)

4、為了快速定位缺陷,我們希望把注意力集中於相關的失敗測試上。這就是為什麼當某個測試所依賴的測試失敗時,PHPUnit會跳過這個測試。通過利用測試之間的依賴關係,缺陷定位得到了改進。

如下案例phpunit2.php:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
class DependencyFailureTest extends PHPUnit_Framework_TestCase
{
public function testOne()
{
$this->assertTrue(FALSE);
}
 
/**
* @depends testOne
*/
public function testTwo()
{
}
}
?>

5、執行結果

1
2
3
4
5
6
7
8
9
10
phpunit phpunit2.php
PHPUnit 3.7.27 by Sebastian Bergmann.
FS
Time: 2 ms, Memory: 4.00Mb
There was 1 failure:
1) DependencyFailureTest::testOne
Failed asserting that false is true.
/home/wwwroot/local.guazi.com/webroot/phpunit2.php:6
FAILURES!
Tests: 1, Assertions: 1, Failures: 1, Skipped: 1.

6、測試可以使用多於一個@depends標註。PHPUnit不會更改測試的執行順序,因此你需要自行保證某個測試所依賴的所有測試均出現於這個測試之前。

擁有多個@depends標註的測試,其第一個引數是第一個生產者提供的基境,第二個引數是第二個生產者提供的基境,以此類推

案例phpunit3.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
class MultipleDependenciesTest extends PHPUnit_Framework_TestCase
{
public function testProducerFirst()
{
$this->assertTrue(true);
return `first`;
}
 
public function testProducerSecond()
{
$this->assertTrue(true);
return `second`;
}
 
/**
* @depends testProducerFirst
* @depends testProducerSecond
*/
public function testConsumer()
{
$this->assertEquals(
array(`first``second`),
func_get_args()
);
}
}
?>

7、執行結果

1
2
3
4
5
phpunit phpunit3.php
PHPUnit 3.7.27 by Sebastian Bergmann.
...
Time: 4 ms, Memory: 4.25Mb
OK (3 tests, 3 assertions)

本文轉自shayang8851CTO部落格,原文連結:http://blog.51cto.com/janephp/1298842,如需轉載請自行聯絡原作者


相關文章