编写PHPUnit测试

2 编写PHPUnit测试

类测试

  • 针对类的测试,命名习惯是$className+Test,即类名+Test
  • 该类通常继承PHPUnit\Framework\TestCase
  • 测试方法都是以test+$functionName命名的,配合phpDocumentor ,可以在注释中使用@test方法标注为测试方法
  • 继承的PHPUnit\Framework\TestCase中有很多判断方法,这些方法都是以assert开头的。

具体的函数名太多了,肯定记不住,就说他们的大致内容,当你需要的时候再去找对应的方法:

  • 数据类型判断,intfloatstring
  • 文件,路径等,该文件是否可读,路径是否存在,该文件是否存在等
  • 数组判断,该数组中是否有该值
  • 字符串判断,字符串是否以指定字符串开头,字符串是否包含指定字符
  • xml文件判断,两个xml文件是否相等等
  • 对象判断,该对象是否包含指定属性,两个对象是否相同,该对象是否是一个类的实例等
  • 大于,小于等判断

以上判断有是否相等,就会有不想等的对应函数。

<?php
use PHPUnit\Framework\TestCase;

class StackTest extends TestCase
{
   
    public function testPushAndPop()
    {
   
        $stack = [];
        // 判断是否相同
        $this->assertEquals(0, count($stack));

        array_push($stack, 'foo');
        $this->assertEquals('foo', $stack[count($stack)-1]);
        $this->assertEquals(1, count($stack));

        $this->assertEquals('foo', array_pop($stack));
        $this->assertEquals(0, count($stack));
    }
}
?>

判断都是正确时,系统执行结果:

在这里插入图片描述

判断错误,系统执行结果:

在这里插入图片描述

测试依赖关系:@depends

PHPUnit支持对测试方法之间的显式依赖关系进行声明。这种依赖关系并不是定义在测试方法的执行顺序中,而是允许生产者(producer)返回一个测试基境(fixture)的实例,并将此实例传递给依赖于它的消费者(consumer)们。

  • 生产者(producer),是能生成被测单元并将其作为返回值的测试方法。
  • 消费者(consumer),是依赖于一个或多个生产者及其返回值的测试方法。
class UserStoreTest extends TestCase{
   
    public function testDepends(){
   
        $this->testPop(
            $this->testPush(
                $this->testEmpty()
            )
        );
    }
    public function testEmpty()
    {
   
        $stack = [];
        $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);
    }
}

我感觉没有特定的生成者与消费者,而是看调用关系,比如testPush依赖testEmpty,则testEmpty是生产者,而testPush是消费者。再来看testPoptestPushtestPush这时就是生产者,而testPop则是消费者。

默认情况下,生产者所产生的返回值将“原样”传递给相应的消费者。这意味着,如果生产者返回的是一个对象,那么传递给消费者的将是一个指向此对象的引用。如果需要传递对象的副本而非引用,则应当用 @depends clone 替代 @depends。

class UserStoreTest extends TestCase{
   
    public function testOne(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值