单元测试 - Specify ¶
作者:KK
发表日期:2015.12.13
通常断言失败时就会退出这个测试方法,使用specify这个特性可以使得断言失败时不会退出,先看例子:
class HelloWorldTest extends \Codeception\TestCase\Test{
use \Codeception\Specify; //要先在这里use一下
public function testDemo(){
$this->specify('环节1:测试time函数', function(){
//断言失败了不会往这个函数的代码下面跑而已,但外面还是会继续往下跑的
$this->assertInternalType('string', time()); //失败
$this->assertInternalType('string', md5(time())); //成功,但上面失败,跑不到这里,退出这一次的specify
});
//无论上面的specify里成还是败都还会继续跑这里
$this->assertTrue(true);
$this->specify('环节2:测试date函数', function(){
$testTimeStamp = 1447171200;
$this->assertNotEquals(1990, date('Y', $testTimeStamp));
$this->assertEquals(2015, date('Y', $testTimeStamp));
$this->assertEquals(5, count(explode('-', date('Y-m-d')))); //失败
});
$this->assertTrue(false, '外面也失败了');
}
}
使用$this->specify('测试目标的说明', $具体的测试工作代码函数)
可以实现一块specify中断不会导致specify外面的测试代码中断而只会中断specify里面的代码而已,这种情况在复杂业务测试时,当一个测试方法中的两个测试逻辑没有依赖关系时比较有用,而且这里还有一个说明的作用,将一大块代码进行一个说明,但这样说不是算完美,不过specify是比较有用的,只是小规模测试时一般用不上
另外顺带一提,使用specify方法前先要在类里面的顶部use \Codeception\Specify;
这个Trait
class HelloWorldTest extends \Codeception\TestCase\Test{
use \Codeception\Specify; //看这里看这里
//...
}