|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
理解网站这一概念之后不难看出,任何网站都是由网页组成的,也就是说想完成网站,必须先学会做网页,因此必须要掌握了HTML,才能为今后制作网站打下基础。 在本文中,笔者将为人人引见phpunit中的两个初级概念和用法,虽然它纷歧定在你的平常单位测试中都用到,但了解和学会它们的用法对进修phpunit仍是非常主要的。 Phpunit中的Annotations
假如有其他编程言语经历的开辟者,应当对Annotations(注解)不生疏,其其实phpunit中,一个复杂的以下面的一段正文也能够以为是Annotations:
<?php
class MyTestClass extends PHPUnit_Framework_TestCase
{
/**
* Testing the answer to “do you love unit tests?”
*/
public function testDoYouLoveUnitTests()
{
$love = true;
$this->assertTrue($love);
}
}
?> 可以看到,其实一段以/** **/为标志的文字,就能够以为是一种Annotations,但Annotations其实不单单是复杂的正文,它是与一个法式元素相干联信息或元数据的标注,它不影响法式的运转,但相干的软件东西或框架可以将其转换成特别的元数据标志,以便利开辟者以更少的代码去进步效力(好比经由过程。假如你熟习Java,则会发明在Java SE 5中及象Spring等框架中,都大批利用了Annotations。
但是,因为php其实不象Java那样是编译性言语,因而自己缺少去解析Annotations的机制,但幸亏phpunit去供应了如许的功效,咱们以上面的代码为例:
<?php
class MyMathClass
{
/**
* Add two given values together and return sum
*/
public function addValues($a,$b)
{
return $a+$b;
}
}
?> 下面的只是一个复杂的加法的例子,为此,咱们利用Annotations去编写一个单位测试,在上两篇文章中,咱们采取的是手工编写单位测试的办法,而本文中,将引见利用phpunit号令行的办法,主动生成单位测试的框架,办法以下:
起首把下面的类保留为MyMathClass.php,然后在号令行下运转以下号令:
phpunit Cskeleton-test MyMathClass 这时候phpunit会主动生成以下的框架单位测试代码:
<?php
require_once "/path/to/MyMathClass.php";
/**
* Test class for MyMathClass.
* Generated by PHPUnit on 2011-02-07 at 12:22:07.
*/
class MyMathClassTest extends PHPUnit_Framework_TestCase
{
/**
* @var MyMathClass
*/
protected $object;
/**
* Sets up the fixture, for example, opens a network connection.
* This method is called before a test is executed.
*/
protected function setUp()
{
$this->object = new MyMathClass;
}
/**
* Tears down the fixture, for example, closes a network connection.
* This method is called after a test is executed.
*/
protected function tearDown()
{
}
/**
* @todo Implement testAddValues().
*/
public function testAddValues()
{
// Remove the following lines when you implement this test.
$this->markTestIncomplete(
"This test has not been implemented yet."
);
}
}
?>
可以看到,phpunit为咱们生成的单位测试代码主动引入了本来的MyMathClass.php,同时也生成了setUp和tearDown办法,但独一的中心单位测试代码是留给了咱们编写。假如想在这个基本上更疾速的生成咱们想要的单位测试代码,要若何完成呢?没错,就是利用annotations!咱们可以在本来的MyMathClass.php中到场以下的annotations。
<?php
class MyMathClass
{
/**
* Add two given values together and return sum
* @assert (1,2) == 3
*/
public function addValues($a,$b)
{
return $a+$b;
}
}
?>
然后再象上述一样在号令交运行:
phpunit Cskeleton-test MyMathClass 这个时分会为咱们生成以下的单位测试代码:
<?php
/**
* Generated from @assert (1,2) == 3.
*/
public function testAddValues()
{
$this->assertEquals(
3,
$this->object->addValues(1,2)
);
}
?>
看到了么?咱们在原本的类中到场了注解@assert(1,2)==3,则phpunit主动为咱们生成了准确的单位测试代码。固然,可以参考phpunit手册,进修到更多的关于@assert注解利用的划定规矩。
上面再举一个例子来说解annotations。假定咱们的法式中的一个办法,只是仅需求数据的输出,而且不依附XML或数据库供应数据源,则为了测试这个办法,咱们能够想到的一个办法是在法式中设置一个测试数据集去测试,但这里引见一个对照复杂的办法,就是利用注解@dataProvider,修正MyMathClass.php以下:
<?php
/**
* Data provider for test methods below
*/
public static function provider()
{
return array(
array(1,2,3),
array(4,2,6),
array(1,5,7)
);
}
/**
* Testing addValues returns sum of two values
* @dataProvider provider
*/
public function testAddValues($a,$b,$sum)
{
$this->assertEquals(
$sum,
$this->object->addValues($a,$b)
);
}
?>
可以看到,这里利用了注解@dataProvider,指了然测试用例的数据供应者是由provider办法前往的一个数组。所以在单位测试时,数组中的第0个元素则会赋值给$a,第1个元素则会赋值给b,第3个元素则会赋值给sum,可以看到,下面的第3个数组供应的数据是不克不及经由过程单位测试的,由于1+5不等于7。
另外,这里还复杂引见两个经常使用的annotations,好比@expectedException注解可以测试代码中是不是准确抛出了异常,好比:
<?phprequire_once "PHPUnit/Framework.php";
class ExceptionTest extends PHPUnit_Framework_TestCase{
/**
* @expectedException InvalidArgumentException */
public function testException() {
}
}
?>
这里就用注解的办法暗示testException中必需抛出的异常类型为InvalidArgumentException。
别的一个是@cover注解。它的感化是标识phpunit只为类中的哪些办法或感化域生成测试代码,好比:
/**
* @covers SampleClass::publicMethod
* @covers SampleClass::<!public>
* @covers HelperClass<extended>
*/
public function testMethod()
{
$result = SampleClass::method();
}
<P> 则phpunit只为SampleClass类中的publicMethod办法、SampleClass类中的一切非public声明的办法和HelperClass类或它的个中一个父类发生单位测试代码。
根据功能来进行封装等。很多的不懂,在使用搜索引擎查找,或者请教老师和在老师详细的讲解、指导下,都能顺利解决。 |
|