Help us understand the problem. What is going on with this article?

CakePHP 2 から CakePHP3 ORM を使ったテスト

さて、まず kunit さんの記事 「CakePHP2 から CakePHP3 ORM を使ってみる」 を読ませていただいて、
「既存のコードは、製品コードの他にテストのコードがあるのだけれど、どうすればいいのかな?」
という疑問がわきました。
さて、どこまでできるかわからないのですが、試してみることにしました。

kunit さんがもともと用意していたリポジトリが使えるのでとても楽に進めることができました。ありがとうございます!

今回、私の方で手を加えたソースの差分は、こちら

テストを動かすためにつまずいた点や思いついたことを並べてみます。

phpunit は何を使えば良い?

とりあえず、今回は CakePHP 2 と 3 の両方でサポートしている 5.7.* にしました。
ただ、php 7.2 を使うのであれば、phpunit 6 以上が必要らしいのですが、
6 は来年2月1日でサポート終了なので 7.x 系がいい?

https://phpunit.de/supported-versions.html

ORM へのテストデータベースへの接続方法

CakePHP では、テスト実行時にテストデータベースへ接続します。どうやって接続先を切り替えたらいいのでしょう?
現状では、それぞれ別々の設定を持っていて全く連携していないので、何か手を打つ必要がありそうです。

調べた結果、接続先は Cake\Datasource\ConnectionManager で制御していました。

https://github.com/okinaka/cakephp2-with-cakephp3-orm/blob/develop/app/Config/bootstrap.php#L118-L121

 \Cake\Datasource\ConnectionManager::setConfig( 
     \Cake\Core\Configure::consume('Datasources')
);

として、 test もデータソースとして設定した後、

 ConnectionManager::alias('test', 'default');

をテスト実行時に設定します。
今回は、 app/Test/bootstrap.php に上のコードを書くだけにしてます。
これで、 テストデータベースへ接続するようになりました。

この処理は CakePHP 3 の場合は、 FixtureManager 内でやってくれるみたいだけれど、
CakePHP 2 のフィクスチャしかないので、ORM の部分は自前で FixtureManager を実装することになるはず。

TestCase::getMockForModel() の実装

モデルをモックしたい場合もあると思います。
これも、 ORM 部分の実装は、 3 から取ってこないとダメっぽい。

真面目に実装するとなると こちら をコピって動くようにするわけだけど、
面倒臭そうなので、今回はパスかな。

以上、雑に調べてみましたが、意外といけるかも?という感触は得られて満足です。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away