Travis CIで自動テスト(PHPUnit)をしてもらう。〜 入門編〜

やっと、テストコード…PHPUnitの使い方をわかってきた今日この頃です。
さらに、テストは自分でもやりますが、コミットしたら勝手にテストしてくれるCIがいると、頼れるうって思います。


↑これを(「passing」になってるのを)README.mdに貼りたかっただけなんですけどね!!

ということで
PHPUnit と Travis CI
の使い方を書きたいと思います。(自己流)

https://github.com/kin29/ci-test ←ここにソース置いています。

PHPUnit

テストコードにそって、テストしてくれるツール。

Travis CI

テスト/ビルド環境を作ってくれるツール。
ただし、環境を用意してくれるだけなのでビルド/テスト内容は「.travis.yml」に記述しなければならない。
CIツールの代表的なものである、Jenkinsさんはテストのための環境構築が必要となるが、その手間が省ける。(=>SaaS)

実践!GithubでコミットしたらTravisCIに自動でテスト(PHPUnit)をしてもらう。

PHPUnitの準備

$ mkdir ci-test 
$ cd ci-test/

composer.json をつくる。composer initだと対話式でできます。
依存関係も適切に設定してくれるので、自分で生にcomposer.json書くより安全な気がします。
今回でいうとPHPとPHPunitのバージョン関係もここでいい感じにしてくれました。

$ composer init
                                            
  Welcome to the Composer config generator  
                                          

This command will guide you through creating your composer.json config.

Package name (/) [kin29/ci-test]:
Description []: it is ci-test.
Author [kin29 <kin29.com@gmail.com>, n to skip]: 
Minimum Stability []: 
Package Type []: 
License []: MIT

Define your dependencies.

Would you like to define your dependencies (require) interactively [yes]? 
Search for a package: php
Enter the version constraint to require (or leave blank to use the latest version): >=7.0.0
Search for a package: 
Would you like to define your dev dependencies (require-dev) interactively [yes]? 
Search for a package: phpunit/phpunit
Enter the version constraint to require (or leave blank to use the latest version): 
Using version ^7.3 for phpunit/phpunit
Search for a package: 

{
    "name": "kin29/ci-test",
    "description": "it is ci-test.",
    "require": {
        "php": ">=7.0.0"
    },
    "require-dev": {
        "phpunit/phpunit": "^7.3"
    },
    "license": "MIT",
    "authors": [
        {
            "name": "kin29",
            "email": "kin29.com@gmail.com"
        }
    ]
}

Do you confirm generation [yes]? 
Would you like the vendor directory added to your .gitignore [yes]? 

$ ls
composer.json   //できた!!autoloadとかはあとで追加する。
$ composer install
$ ls
composer.json   composer.lock   vendor
$ vi composer.json  //autoload追加
//以下を追記
  "autoload": {
      "psr-4": {
            "App\\": "src/"
        }
  },
  "autoload-dev": {
      "psr-4": {
            "Test\\": "tests/"
      }
  }
$ composer update   //autoloadを適用させる
//実装とテストを書く。構成こんな感じ
$ tree src/ tests/ bootstrap.php
src/
└── Kin29.php
tests/
└── Kin29Test.php
bootstrap.php 

0 directories, 2 files
//phpunit.xmlを作る。
$ vi phpunit.xml

<phpunit bootstrap="./bootstrap.php">
    <testsuites>
        <testsuite name="Ci Test">
            <file>tests/Kin29Test.php</file>
        </testsuite>
    </testsuites>
</phpunit>
//テスト実行→成功!
//これを、コミットした時、自動でテスト実行してもらうようにする(→CIの役目)
$ phpunit tests/
PHPUnit 7.2.4 by Sebastian Bergmann and contributors.

.                                                                   1 / 1 (100%)

Time: 296 ms, Memory: 10.00MB

OK (1 test, 1 assertion)

Travis CIの準備

$ vi .travis.yml //ビルド・テストの設定ファイルを作成
language: php
php:
 - 7.1
 - 7.2

before_script:
 - composer install

script:
 - phpunit tests/
$ git add .
$ git commit -m 'travis-ci,phpunit追加'
$ git push origin master

ビルド・テスト開始!!!

Githubのリポジトリにコミットすると、ビルド・テストが始まります。
↑trigger word設定で変更可能です。

「passing」になれば、テスト合格です!
「failed」になってもコンソールのログが見れるので、原因を突き止めやすいです!
PHPとPHPUnitのバージョンがあってないって、何回も言われました。
CIが自分では知らないことも気づいてくれて教えてくれて助かります。