Anton Grebnev
13 years ago
1 changed files with 242 additions and 0 deletions
@ -0,0 +1,242 @@ |
|||||
|
<?php |
||||
|
|
||||
|
/* |
||||
|
* @copyright NetMonsters <team@netmonsters.ru> |
||||
|
* @link http://netmonsters.ru |
||||
|
* @package Majestic |
||||
|
* @subpackage UnitTests |
||||
|
* @since 2011-11-4 |
||||
|
* |
||||
|
* Unit tests for MySQLiStatement class |
||||
|
*/ |
||||
|
|
||||
|
require_once dirname(__FILE__) . '/../../util/profiler/CommandProfiler.php'; |
||||
|
require_once dirname(__FILE__) . '/../../util/profiler/Profiler.php'; |
||||
|
require_once dirname(__FILE__) . '/../../model/Db.php'; |
||||
|
require_once dirname(__FILE__) . '/../../model/DbDriver.php'; |
||||
|
require_once dirname(__FILE__) . '/../../model/DbStatement.php'; |
||||
|
require_once dirname(__FILE__) . '/../../model/MySQLiStatement.php'; |
||||
|
|
||||
|
class MySQLiStatementTest extends PHPUnit_Framework_TestCase |
||||
|
{ |
||||
|
|
||||
|
|
||||
|
private $driver; |
||||
|
|
||||
|
private $stmt; |
||||
|
|
||||
|
private $testData = array( |
||||
|
array('one' => 11, 'two' => 12), |
||||
|
array('one' => 21, 'two' => 22), |
||||
|
array('one' => 31, 'two' => 32), |
||||
|
); |
||||
|
|
||||
|
|
||||
|
public function run(PHPUnit_Framework_TestResult $result = NULL) |
||||
|
{ |
||||
|
$this->setPreserveGlobalState(false); |
||||
|
return parent::run($result); |
||||
|
} |
||||
|
|
||||
|
public function setUp() |
||||
|
{ |
||||
|
if (!isset($this->stmt)) { |
||||
|
$this->driver = $this->getMockBuilder('DbDriverMock') |
||||
|
->disableOriginalConstructor() |
||||
|
->setMethods(array('quote', 'getConnection')) |
||||
|
->getMock(); |
||||
|
$this->sql = 'SELECT * :place FROM :place AND :new'; |
||||
|
$this->stmt = new MySQLiStatement($this->driver, $this->sql); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* @runInSeparateProcess |
||||
|
*/ |
||||
|
public function testFetchNoResult() |
||||
|
{ |
||||
|
if (!defined('DEBUG')) { |
||||
|
define('DEBUG', false); |
||||
|
} |
||||
|
$this->assertFalse($this->stmt->fetch()); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* @runInSeparateProcess |
||||
|
* @expectedException Exception |
||||
|
* @expectedExceptionMessage ERROR |
||||
|
*/ |
||||
|
public function testDriverExecuteNoResult() |
||||
|
{ |
||||
|
if (!defined('DEBUG')) { |
||||
|
define('DEBUG', false); |
||||
|
} |
||||
|
$this->setDriverGetConnectionWrongResultMethod(); |
||||
|
$this->stmt->execute(array('place' => 'place_val', 'new' => 'new_val')); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* @runInSeparateProcess |
||||
|
*/ |
||||
|
public function testFetch() |
||||
|
{ |
||||
|
if (!defined('DEBUG')) { |
||||
|
define('DEBUG', false); |
||||
|
} |
||||
|
$this->setDriverGetConnectionMethod(); |
||||
|
$this->stmt->execute(array('place' => 'place_val', 'new' => 'new_val')); |
||||
|
$this->assertEquals('OBJECT', $this->stmt->fetch()); |
||||
|
$this->assertEquals('ARRAY', $this->stmt->fetch(Db::FETCH_NUM)); |
||||
|
$this->assertEquals('ASSOC', $this->stmt->fetch(Db::FETCH_ASSOC)); |
||||
|
$this->assertEquals('ARRAY', $this->stmt->fetch(Db::FETCH_BOTH)); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* @runInSeparateProcess |
||||
|
*/ |
||||
|
public function testFetchObject() |
||||
|
{ |
||||
|
if (!defined('DEBUG')) { |
||||
|
define('DEBUG', false); |
||||
|
} |
||||
|
$this->setDriverGetConnectionMethod(); |
||||
|
$this->stmt->execute(array('place' => 'place_val', 'new' => 'new_val')); |
||||
|
$this->assertEquals('OBJECT', $this->stmt->fetchObject()); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* @runInSeparateProcess |
||||
|
*/ |
||||
|
public function testFetchWithDebug() |
||||
|
{ |
||||
|
if (!defined('DEBUG')) { |
||||
|
define('DEBUG', true); |
||||
|
} |
||||
|
$this->setDriverGetConnectionMethod(); |
||||
|
$this->stmt->execute(array('place' => 'place_val', 'new' => 'new_val')); |
||||
|
$this->assertEquals('OBJECT', $this->stmt->fetch()); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* @runInSeparateProcess |
||||
|
*/ |
||||
|
public function testClose() |
||||
|
{ |
||||
|
if (!defined('DEBUG')) { |
||||
|
define('DEBUG', false); |
||||
|
} |
||||
|
$this->assertAttributeEquals(null, 'result', $this->stmt); |
||||
|
$this->setDriverGetConnectionMethod(); |
||||
|
$this->stmt->execute(array('place' => 'place_val', 'new' => 'new_val')); |
||||
|
$this->assertAttributeNotEquals(null, 'result', $this->stmt); |
||||
|
$this->stmt->close(); |
||||
|
$this->assertAttributeEquals(null, 'result', $this->stmt); |
||||
|
} |
||||
|
|
||||
|
public function testAffectedRows() |
||||
|
{ |
||||
|
$mysqliMock = $this->getMockBuilder('MysqliDrvr'); |
||||
|
$mysqliMock->affected_rows = 'AFFECTED_ROWS'; |
||||
|
|
||||
|
$this->driver |
||||
|
->expects($this->any()) |
||||
|
->method('getConnection') |
||||
|
->will($this->returnValue($mysqliMock)); |
||||
|
|
||||
|
$this->assertEquals('AFFECTED_ROWS', $this->stmt->affectedRows()); |
||||
|
} |
||||
|
|
||||
|
public function testNumRowsNoResult() |
||||
|
{ |
||||
|
$this->assertFalse($this->stmt->numRows()); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* @runInSeparateProcess |
||||
|
* @expectedException Exception |
||||
|
*/ |
||||
|
public function testNumRows() |
||||
|
{ |
||||
|
if (!defined('DEBUG')) { |
||||
|
define('DEBUG', false); |
||||
|
} |
||||
|
|
||||
|
$this->setDriverGetConnectionMethod(); |
||||
|
$this->stmt->execute(array('place' => 'place_val', 'new' => 'new_val')); |
||||
|
$this->assertNull($this->stmt->numRows()); |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* @expectedException Exception |
||||
|
* @expectedExceptionMessage Invalid fetch mode |
||||
|
* @runInSeparateProcess |
||||
|
*/ |
||||
|
public function testFetchInvalidMode() |
||||
|
{ |
||||
|
if (!defined('DEBUG')) { |
||||
|
define('DEBUG', false); |
||||
|
} |
||||
|
$this->setDriverGetConnectionMethod(); |
||||
|
$this->stmt->execute(array('place' => 'place_val', 'new' => 'new_val')); |
||||
|
$this->stmt->fetch(324); |
||||
|
} |
||||
|
|
||||
|
private function setDriverGetConnectionMethod() |
||||
|
{ |
||||
|
$resultMock = $this->getMockBuilder('mysqli_result') |
||||
|
->disableOriginalConstructor() |
||||
|
->setMethods(array('fetch_object', 'fetch_array', 'fetch_assoc', 'close')) |
||||
|
->setMockClassName('Mysqli_Result_Mock') |
||||
|
->getMock(); |
||||
|
$resultMock |
||||
|
->expects($this->any()) |
||||
|
->method('fetch_object') |
||||
|
->will($this->returnValue('OBJECT')); |
||||
|
$resultMock |
||||
|
->expects($this->any()) |
||||
|
->method('fetch_array') |
||||
|
->will($this->returnValue('ARRAY')); |
||||
|
$resultMock |
||||
|
->expects($this->any()) |
||||
|
->method('fetch_assoc') |
||||
|
->will($this->returnValue('ASSOC')); |
||||
|
$resultMock |
||||
|
->expects($this->any()) |
||||
|
->method('close') |
||||
|
->will($this->returnValue(TRUE)); |
||||
|
|
||||
|
$mysqliMock = $this->getMock('MysqliDrvr', array('query')); |
||||
|
$mysqliMock |
||||
|
->expects($this->any()) |
||||
|
->method('query') |
||||
|
->with($this->anything()) |
||||
|
->will($this->returnValue($resultMock)); |
||||
|
|
||||
|
$this->driver |
||||
|
->expects($this->any()) |
||||
|
->method('getConnection') |
||||
|
->will($this->returnValue($mysqliMock)); |
||||
|
|
||||
|
return $this; |
||||
|
} |
||||
|
|
||||
|
private function setDriverGetConnectionWrongResultMethod() |
||||
|
{ |
||||
|
$mysqliMock = $this->getMock('MysqliDrvr', array('query')); |
||||
|
$mysqliMock |
||||
|
->expects($this->any()) |
||||
|
->method('query') |
||||
|
->with($this->anything()) |
||||
|
->will($this->returnValue(false)); |
||||
|
$mysqliMock->error = 'ERROR'; |
||||
|
$mysqliMock->errno = 0; |
||||
|
|
||||
|
$this->driver |
||||
|
->expects($this->any()) |
||||
|
->method('getConnection') |
||||
|
->will($this->returnValue($mysqliMock)); |
||||
|
|
||||
|
return $this; |
||||
|
} |
||||
|
|
||||
|
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue