モデルのテスト

今日も粛々とyiiする。
yiic で生成したモデルをテストする必要はないと思いますが、サンプルとして残しておきます。

Saveのテスト

テストケース

yiiprac1\protected\tests\unit\UserTest.php にtestSaveメソッドを加える。

<?php
class UserTest extends CDbTestCase
{
	public $fixtures=array(
		'users'=>'User',
	);

	public function testSave()
	{
		$user = new User;
		$user->setAttributes(array(
			'username' => 'user_save',
			'password' => 'pass_save',
			'email' => 'user_save@abc.def',
		),false);
		$this->assertTrue($user->save(false));
		
		$user = User::model()->findByPk($user->id);
		$this->assertTrue($user instanceof User);
		$this->assertEquals('user_save', $user->username);
		$this->assertEquals('pass_save', $user->password);
		$this->assertEquals('user_save@abc.def', $user->email);
	}
}
テスト
C:\xampp\htdocs\yiiprac1\protected\tests>phpunit unit\UserTest.php
PHPUnit 3.5.13 by Sebastian Bergmann.

.

Time: 1 second, Memory: 8.25Mb

OK (1 test, 5 assertions)

C:\xampp\htdocs\yiiprac1\protected\tests>

テスト後、DB上でsaveメソッドで保存したレコードを確認できる。

Findのテスト

フィクスチャ

yiiprac1\protected\tests\fixtures\User.php

<?php
return array(
	'sample1'=>array(
		'username' => 'user1',
		'password' => 'pass1',
		'email' => 'user1@abc.def',
	),
	'sample2'=>array(
		'username' => 'user2',
		'password' => 'pass2',
		'email' => 'user2@abc.def',
	),
);

Defining Fixtures - Yii guideのコメントにもありますが、phpMyAdmin(3.3以降)で php array でエキスポートしたものをちょっと加工すればフィクスチャができます。

テストケース

yiiprac1\protected\tests\unit\UserTest.php

<?php
class UserTest extends CDbTestCase
{
	public $fixtures=array(
		'users'=>'User',
	);
//略
	public function testFind()
	{
		$user = User::model()->findByPk(1);
		$this->assertTrue($user instanceof User);
		$this->assertEquals('user1', $user->username);
		$this->assertEquals('pass1', $user->password);
		$this->assertEquals('user1@abc.def', $user->email);

		$user = User::model()->find('username=:username', array(':username'=>'user2'));
		$this->assertTrue($user instanceof User);
		$this->assertEquals('user2', $user->username);
		$this->assertEquals('pass2', $user->password);
		$this->assertEquals('user2@abc.def', $user->email);
	}
}
テスト
C:\xampp\htdocs\yiiprac1\protected\tests>phpunit --filter testFind unit\UserTest.php
PHPUnit 3.5.13 by Sebastian Bergmann.

.

Time: 1 second, Memory: 8.25Mb

OK (1 test, 8 assertions)

C:\xampp\htdocs\yiiprac1\protected\tests>

Deleteのテスト

テストケース

yiiprac1\protected\tests\unit\UserTest.php

<?php
class UserTest extends CDbTestCase
{
	public $fixtures=array(
		'users'=>'User',
	);
//略
	public function testDelete()
	{
		$user = User::model()->findByPk(1);
		$this->assertTrue($user instanceof User);
		$this->assertEquals('user1', $user->username);
		$this->assertEquals('pass1', $user->password);
		$this->assertEquals('user1@abc.def', $user->email);

		$this->assertTrue($user->delete());
		
		$user = User::model()->findByPk(1);
		$this->assertNull($user);
	}
}
テスト
C:\xampp\htdocs\yiiprac1\protected\tests>phpunit unit\UserTest.php
PHPUnit 3.5.13 by Sebastian Bergmann.

...

Time: 1 second, Memory: 8.25Mb

OK (3 tests, 19 assertions)

C:\xampp\htdocs\yiiprac1\protected\tests>