PHPUnit从零开始(2):编写 PHPUnit 测试

计划永远赶不上变化,本计划本月完成所有PHPUnit的博客内容。今天一看日历发现都TMD的二月底了,而我才写了一篇而已。情何以堪……

今天写第二篇,详细说一说如何写出一个测试用例。
这里会涉及到一些什么自动加载之类的,我就不再这里补充了,大家可以查阅相关PHP自动加载的资料。
首先我的项目结构如下:

+phpunit // 项目名称
+src // 存放项目代码,需要测试的代码
+tests // 测试用户存在目录
+vendor // composer生成的目录,存放的第三方包
composer.json // composer需要的配置文件
index.php // 入口文件,主要涉及自动加载相关代码
phpunit.xml // 测试用例的配置文件

这里每一个文件夹及文件的大体情况如上,现在在我的src目录下有一个文件,名字:Money.php

<?php

namespace Src;

/** * @author: helei * @createTime: 2016-01-07 17:45 * @description: */
class Money {
    private $amount;

    public function __construct($amount) {
        $this->amount = $amount;
    }

    public function getAmount() {
        return $this->amount;
    }

    public function negate() {
        return new Money(-1 * $this->amount);
    }
}

当你想把一些东西写到 print 语句或者调试表达式中时,别这么做,将其写成一个测试来代替。 –Martin Fowler

这是编程大牛们的说的话,要我说:如果你想要测试一个方法内部逻辑是否正确,那么就写一个测试用例,测试一下这个方法,给他一个值,看看他输出的结果是否是预期的值。

OK,现在具体到我这个方法,我要测试Money这个类,我给他初始化时,输入1,经过Money::multiple()方法翻倍后,他的值应该是:2,然后通过Money::getAmount()获取翻倍后的值,与2进行比较,通过断言检查是不是2.
那么以上是测试用例要验证的东西,具体到实际的编码,在 tests 文件夹下面 新建一个 MoneyTest.php 文件,

<?php

namespace Tests;

use Src\Money;

/** * @author: helei * @createTime: 2016-01-07 17:47 * @description: */
class MoneyTest extends \PHPUnit_Framework_TestCase {

    public function testCanBeNegated() {
        // Arrange
        $a = new Money(1);

        // Act
        $b = $a->multiple();

        // Assert
        $this->assertEquals(2, $b->getAmount());
    }
}

现在所有的代码写完了,到了使用测试用例的时候了。这里有必要给个辅助资料,通过这个官方的文档,可以详细了解各个命令的使用。后面我用到的所有命令都不做解释了哈,不明白的请移动这里查看。

在cmd命令行,进入到项目所在目录,操作如下图。
正确的情况:

 .
 当测试成功时输出。
 F
 当测试方法运行过程中一个断言失败时输出。
 E
 当测试方法运行过程中产生一个错误时输出。
 R
 当测试被标记为有风险时输出。
 S
 当测试被跳过时输出。
 I
 当测试被标记为不完整或未实现时输出。
通过观察,可以发现,命令行输出的是一个 · ,代表Money这个类,输出了我们预期的结果。通过了测试。

大家可以在断言处,把各种相应的值进行修改,然后看看输出的结果。

写着写着,发现PHPUnit的基础知识也就这么点,后面的好像可写可不写似的,因为在官方文档中都写的清清楚楚了,我都不好意思再把文档抄过来一遍,然后写个 原创。

耶,那我如果不写了,那不是就完成了PHPUnit的博客内容了吗?哈哈,好吧,完成2016第一件任务,学完phpunit以及相关博客。接下来会开始设计模式的相关写作,并且会同步github了。

爱好学习与写作的朋友们,千万别跟我酱紫,明明还可以写个五篇七篇的,就两篇然后戛然而止了。当然如果还有不明白的地方,可以留言提问,我后面再补充几篇也无不可。

你可能感兴趣的:(测试,测试用例,phpunit,php测试)