Nagoya OpenSource Conference 2016 CodeIgniter+ci-phpunit-test
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/|version|/phpunit.xsd" backupGlobals="true" backupStaticAttributes="false" <!--bootstrap="/path/to/bootstrap.php"--> cacheResult="false" cacheTokens="false" colors="false" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" forceC
自動テストってめんどくさそうと思っていた 自動テストで品質向上、テストを便利にしたい。 ずっと考えていたが、踏み出せていなかった。 それは自動テスト = Unitテストをガチガチに組む必要があるという思い込み。 テストコードのメンテが手間、テストコード書くのにも時間がかかる。 メソッドレベルの IN - OUTまでテストコード書いて、結局 時間対効果どうなの? などなど、ポジティブになれていなかったため。 はじめから全部でなく、まずはユーザの振る舞い、画面の動きで担保できれば良い。 エンドツーエンドってやつですかね。 それも部分的でもいいから小さく始めれば良いという思考が生まれてきたので、 SelenuimによるUIテストを学んでみようと思う。 MACで環境構築 composerのinstall curl -sS https://getcomposer.org/installer | ph
"require-dev": { "phpunit/phpunit": "4.8.*", "phpunit/phpunit-selenium": ">=1.2" } phpunitコマンドを使うためにパスを通す。 export PATH=$PATH:~/.composer/vendor/bin/ パスが通っているかどうかを確認。 phpunit --version テスト! class Login extends PHPUnit_Extensions_Selenium2TestCase { public function setUp() { $this->setBrowser('firefox'); $this->setBrowserUrl('http://example.com'); } public function testOpenLoginForm() { $this->url('
「今までテストを書いたことがないから、そろそろテストを書かなくては・・・」という、PHPUnitもテストのこともまだ知らないプログラマにとって、一番最初に欲しいのは「何から始めたらよいのか」を知るためのガイドです。 本書は、PHPUnitを使ったテストの書き方を、短時間で知るための小冊子です。これだけ読めば、PHPUnitでテストを書いていけるようになります。 本書が特徴的なのは、ユニットテストの形式的な書き方だけを単純に説明した本ではないということです。本書では、PHPUnitによるテストを、オブジェクト指向の原則に沿った、良いコードへリファクタリングしていくための道具、と位置づけています。その流れに沿って、必要最低限の基礎知識や、実際にありそうなサンプルコードで使い方が説明されています。モック(テストダブル)を使ったテスト、フィクスチャを使ったテスト、APIのテストといった対象ごとのP
「はじめに」の「はじめに」 2016年版としてマイグレーションしました。 特にこだわりが無い場合は、こちらを参照してください。 はじめに こんな感じで資料を作ろうとしていた草稿です。 文中のソースコードの正誤とかは見きれていません。 ツッコミとか有れば、よろしくお願いしますm( _ _ )m PHPUnitを使ったからといって、どんなソースコードもテストできる訳ではありません。 テストをし易いようにクラスを設計している必要があります。また、そのように設計していてもUnitテストに入れることの出来ない箇所は出てきます。Unitテストに入れることの出来ない箇所は出来ないと割り切らなければなりません。むしろ、どれだけのコードをUnitテストに入れることが出来るか? というのが設計者の腕の見せどころになるでしょう。 極論を言うと 「どんなクラスでも疎結合に実装していなければならない」 ということで
PHPUnitは以下のような構成ですが、その中の「phpunit-mock-objects」がPHPUnitデフォルトのモックライブラリとなります。 phpunitphpcode-coveragephpfile-iteratorphptext-templatephptimerphptoken-streamphpunitphpunit-mock-objects ← これ構成 Copy├── Builder │ ├── Identity.php │ ├── InvocationMocker.php │ ├── Match.php │ ├── MethodNameMatch.php │ ├── Namespace.php │ ├── ParametersMatch.php │ └── Stub.php ├── Exception │ ├── BadMethodCa
DBを使ったテストを考えた場合、 ・Insertのテストが走るとTableにそのデータがInsertされテストが正常完了する ・上記テストをもう一度走らせると、前回のInsertされたデータがあるのでDuplicateでテストが失敗する 上記の問題を解決することを考える ・テストが走るとテーブルが初期化される ・Insertのテストが走ると初期化されているので、前のテストでInsertされたデータは消えているので、Duplicateにはならない。 phpunit/dbunit ・テストが接続するDB情報を設定できる ・テストが走るとテーブルのデータが初期化される インストール Composerを使ってインストール
PHPUnit + DBUnitでMySQLのテストを行う Published: 2016年4月10日 by tomsato 概要 PHPUnitとDBUnitを使ってMySQLのテストを行う(Oracleのテストもできる) テスト用のMySQLを用意してPHPUni+DBUnitでinsert,updateなどのテストを行って その後に意図したデータになっているか確認をすることができる テストの流れ データベースのテストは次の4段階に分けて考える必要がある Gerard Meszaros は、著書 xUnit Test Patterns でユニットテストを次の四段階に分類しています。 フィクスチャとはアプリケーションやデータベースの初期状態のこと、テストを実行する前に用意する 環境の準備 MySQLのインストール $ sudo yum -y install http://dev.mysq
class TwitterClient { public function tweet($message) { return true; } } $hoge = new TwitterClient(); $hoge->tweet('大心なう'); // trueが返る class ClientContainerTest extends PHPUnit_Framework_TestCase { public function test_モックを書いてみる() { $hoge = $this->getMock('TwitterClient', array('tweet')); $hoge->expects($this->any()) ->method('tweet') ->will($this->returnValue(true)); $hoge->tweet('大心なう'); // true
最近になってPHPUnitをちゃんと使ってユニットテストを書くようになってきたのですが、まだまだTipsが足りないと感じます。個人的に実践している書き方をいくつか並べてみます。 追記:最初、シェバングと書いていましたが、オプションを渡せる数が決まっていたりOSによっては動かなかったりとあまり便利でないことがわかりました。。phpunit.xmlを書いた方がいいかも。 ちょっとしたテスト → シェルスクリプト化する PHPUnitは高機能なのですが、いかんせん最初の障壁が高いと思います。とにかく気軽に書きたいなら、シェルスクリプトを作って単独ファイルで実行できるようにするといいです。 #!/bin/sh phpunit --colors *Test.php # ↑オプションを書き並べておく <?php class SampleTest extends PHPUnit_Framework_Te
前置き 地味にこの記事が読まれ続けているみたいなのですが、内容がよい加減に古くて心苦しいので、もうちょっと現代的な内容にマイグレーションしたものを投稿しようと思います。当時と違ってQiitaにもよい記事増えているのに今更感あるのですが、あの記事に辿りついてしまった人のため……という感じで書いておきます。 大前提 PHPUnitを使ったからといって、どんなソースコードもテストできる訳ではありません。テストをし易いようにクラスを設計している必要があります。また、そのように設計していてもUnitテストに入れることの出来ない箇所は出てきます。Unitテストに入れることの出来ない箇所は出来ないと割り切らなければなりません。むしろ、どれだけのコードをUnitテストに入れることが出来るか? というのが設計者の腕の見せどころになるでしょう。極論を言うと 「どんなクラスでも疎結合に実装していなければならない
Prophecyとは phpspec/prophecy PHPUnitと組み合わせて使えるモックライブラリ。 元はphpspecの一部として開発されたもので、phpspecと組み合わせなくても単独で使うことができる。 PHPUnit 4.5からパッケージに同梱されるようになった。PHPUnitの新しいバージョンを使っていれば、composer.jsonに加えなくても使うことができる。 テストダブルとは ユニットテストを書くときに、テスト対象の依存の代替として使うオブジェクトをテストダブルと言う。目的はいくつかある。 依存オブジェクトの準備を手抜きする。100行の準備をしないとテストが書けないとしたらユニットテストが読みにくくなってしまう。 実行しづらいメソッドを差し替える。外部へ通信してしまうもの、I/Oが発生するもの、すごーくたまにしか失敗しないものなどを強制的に変更したいとき。 メソッ
Mockery¶ Mockery is a simple yet flexible PHP mock object framework for use in unit testing with PHPUnit, PHPSpec or any other testing framework. Its core goal is to offer a test double framework with a succinct API capable of clearly defining all possible object operations and interactions using a human readable Domain Specific Language (DSL). Designed as a drop in alternative to PHPUnit’s phpuni
PHPUnitでMockeryを使う場合の最低限のメモ。 Mockeryとはなんぞや? Mockを作るためのツール。要は、存在しないClassを代替してテストを進めるためのツールと思ってよい。 下記のようなコードがある場合、どうぜんHogeClassが存在することが前提となる。 が、大きなプロジェクト等で「まだHogeClassが無い!」などという場合でもある程度テストを進めておける。 //インスタンス生成 $m = new Hoge('foo'); //メソッドを実行 $m->Hello('foo'); //assertの中で使う $this->assertEquals("Hello foo",$m->Hello('foo'));
User_Centric_Tests Codeception provides high-level domain language for tests. Tests are represented as a set of user's actions. Learn More Browser_Testing Tests can be executed using Firefox, Chrome, Safari or Cloud Testing services with Selenium WebDriver. Browser can be emulated with HTTP-requests through CURL with PhpBrowser. Learn More Framework_Testing Tests can be executed inside a PHP frame
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く