<commit_before>---
layout: post
title: PHPUnit阅读笔记 - 2
categories: [PHP, Testing]
description: PHPUnit的简单使用
keywords: phpunit, testing
---
## 安装PHPUnit

### 合适的版本

根据官方的[Release Announcements](https://github.com/sebastianbergmann/phpunit/wiki)

    PHPUnit 4.x版本支持PHP 5.4/5.5/5.6
    PHPUnit 5.x支持PHP 5.6/7.x
    PHPUnit 6.x版本仅支持PHP 7.x。

### 安装

#### Composer

利用composer包管理器进行安装是目前较为方便的方式。
```bash
composer require phpunit/phpunit ~4.8.0 -vvv
```

#### Pear

依据[官方说明](https://github.com/sebastianbergmann/phpunit/wiki/End-of-Life-for-PEAR-Installation-Method)，PHPUnit不在支持使用`pear`进行安装。

## 书写测试代码

测试类应继承`PHPUnit_Framework_TestCase`(PHPUnit 4.x/5.x)/`PHPUnit\Framework\TestCase`(PHPUnit 6.x)；也可以对这个类进行扩展，扩展的方法类似对异常的扩展。

以下为guzzle/guzzle库中的一个测试：
```php
<?php
namespace GuzzleHttp\Tests\Event;
//use ...;
class ConnectExceptionTest extends \PHPUnit_Framework_TestCase
{
    public function testHasNoResponse()
    {
        //...测试代码
    }
}
```

### 简单的测试

测试类一般按照`*Test`的方式命名，`*`一般为要测试的类名。

测试方法一般都以`test*`的方式命名，`*`一般为要测试的类中的方法名；也可以在方法注释中加入`@test`注解标记为测试方法。

下列两种书写方法均为测试方法：
```php
<?php
class FooTest extends PHPUnit_Framework_TestCase
{
    public function testMethod1()
    {
        //method1的测试代码
        $this->assertEquals(true, false);
    }
    /**
     * test method2
     * @test
     */
    public function method2()
    {
        //method2的测试代码
        $this->assertEmpty(false);
    }
}
```
测试代码中调用的`assert*`方法由`PHPUnit_Framework_TestCase`提供，方法描述由简单的英文组成，一般都能看懂。

具体的方法可以参照[文档](https://phpunit.de/manual/current/en/appendixes.assertions.html)。

### 有依赖的测试

### 有数据供给的测试

### 对异常的测试

### 对错误的测试

### 对输出的测试

### 跳过测试

### 小结<commit_msg>github的样式好像有问题 Thu Feb  9 18:21:20 CST 2017<commit_after>---
layout: post
title: PHPUnit阅读笔记 - 2
categories: [PHP, Testing]
description: PHPUnit的简单使用
keywords: phpunit, testing
---
## 安装PHPUnit

### 合适的版本

根据官方的[Release Announcements](https://github.com/sebastianbergmann/phpunit/wiki)

    PHPUnit 4.x版本支持PHP 5.4/5.5/5.6
    PHPUnit 5.x支持PHP 5.6/7.x
    PHPUnit 6.x版本仅支持PHP 7.x。

### 安装

#### Composer

利用composer包管理器进行安装是目前较为方便的方式。
{% highlight bash %}
composer require phpunit/phpunit ~4.8.0 -vvv
{% endhighlight %}

#### Pear

依据[官方说明](https://github.com/sebastianbergmann/phpunit/wiki/End-of-Life-for-PEAR-Installation-Method)，PHPUnit不在支持使用`pear`进行安装。

## 书写测试代码

测试类应继承`PHPUnit_Framework_TestCase`(PHPUnit 4.x/5.x)/`PHPUnit\Framework\TestCase`(PHPUnit 6.x)；也可以对这个类进行扩展，扩展的方法类似对异常的扩展。

以下为guzzle/guzzle库中的一个测试：
{% highlight php %}
<?php
namespace GuzzleHttp\Tests\Event;
//use ...;
class ConnectExceptionTest extends \PHPUnit_Framework_TestCase
{
    public function testHasNoResponse()
    {
        //...测试代码
    }
}
{% endhighlight %}

### 简单的测试

测试类一般按照`*Test`的方式命名，`*`一般为要测试的类名。

测试方法一般都以`test*`的方式命名，`*`一般为要测试的类中的方法名；也可以在方法注释中加入`@test`注解标记为测试方法。

下列两种书写方法均为测试方法：
{% highlight php %}
<?php
class FooTest extends PHPUnit_Framework_TestCase
{
    public function testMethod1()
    {
        //method1的测试代码
        $this->assertEquals(true, false);
    }
    /**
     * test method2
     * @test
     */
    public function method2()
    {
        //method2的测试代码
        $this->assertEmpty(false);
    }
}
{% endhighlight %}

测试代码中调用的`assert*`方法由`PHPUnit_Framework_TestCase`提供，方法描述由简单的英文组成，一般都能看懂。

具体的方法可以参照[文档](https://phpunit.de/manual/current/en/appendixes.assertions.html)。

### 有依赖的测试

### 有数据供给的测试

### 对异常的测试

### 对错误的测试

### 对输出的测试

### 跳过测试

### 小结
{'fraction_non_alphanumeric': 0.15168374816983896, 'fraction_numerical': 0.01786237188872621, 'mean_word_length': 3.9651162790697674, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 7, 'https://': 6, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5816898', 'n_tokens_mistral': 1743, 'n_tokens_neox': 1859, 'n_words': 189}