2015-08-17 17:00:26 -07:00
< ? php
class Framework_MockObject_GeneratorTest extends PHPUnit_Framework_TestCase
{
/**
* @ var PHPUnit_Framework_MockObject_Generator
*/
protected $generator ;
protected function setUp ()
{
$this -> generator = new PHPUnit_Framework_MockObject_Generator ;
}
/**
* @ covers PHPUnit_Framework_MockObject_Generator :: getMock
* @ expectedException PHPUnit_Framework_Exception
*/
public function testGetMockFailsWhenInvalidFunctionNameIsPassedInAsAFunctionToMock ()
{
$this -> generator -> getMock ( 'StdClass' , array ( 0 ));
}
/**
* @ covers PHPUnit_Framework_MockObject_Generator :: getMock
*/
public function testGetMockCanCreateNonExistingFunctions ()
{
$mock = $this -> generator -> getMock ( 'StdClass' , array ( 'testFunction' ));
$this -> assertTrue ( method_exists ( $mock , 'testFunction' ));
}
/**
* @ covers PHPUnit_Framework_MockObject_Generator :: getMock
* @ expectedException PHPUnit_Framework_MockObject_RuntimeException
* @ expectedExceptionMessage duplicates : " foo, foo "
*/
public function testGetMockGeneratorFails ()
{
$mock = $this -> generator -> getMock ( 'StdClass' , array ( 'foo' , 'foo' ));
}
/**
* @ covers PHPUnit_Framework_MockObject_Generator :: getMockForAbstractClass
*/
public function testGetMockForAbstractClassDoesNotFailWhenFakingInterfaces ()
{
$mock = $this -> generator -> getMockForAbstractClass ( 'Countable' );
$this -> assertTrue ( method_exists ( $mock , 'count' ));
}
/**
* @ covers PHPUnit_Framework_MockObject_Generator :: getMockForAbstractClass
*/
public function testGetMockForAbstractClassStubbingAbstractClass ()
{
$mock = $this -> generator -> getMockForAbstractClass ( 'AbstractMockTestClass' );
$this -> assertTrue ( method_exists ( $mock , 'doSomething' ));
}
/**
* @ covers PHPUnit_Framework_MockObject_Generator :: getMockForAbstractClass
*/
public function testGetMockForAbstractClassWithNonExistentMethods ()
{
$mock = $this -> generator -> getMockForAbstractClass (
2015-10-08 11:40:12 -07:00
'AbstractMockTestClass' ,
array (),
'' ,
true ,
true ,
true ,
array ( 'nonexistentMethod' )
2015-08-17 17:00:26 -07:00
);
$this -> assertTrue ( method_exists ( $mock , 'nonexistentMethod' ));
$this -> assertTrue ( method_exists ( $mock , 'doSomething' ));
}
/**
* @ covers PHPUnit_Framework_MockObject_Generator :: getMockForAbstractClass
*/
public function testGetMockForAbstractClassShouldCreateStubsOnlyForAbstractMethodWhenNoMethodsWereInformed ()
{
$mock = $this -> generator -> getMockForAbstractClass ( 'AbstractMockTestClass' );
$mock -> expects ( $this -> any ())
-> method ( 'doSomething' )
-> willReturn ( 'testing' );
$this -> assertEquals ( 'testing' , $mock -> doSomething ());
$this -> assertEquals ( 1 , $mock -> returnAnything ());
}
/**
* @ dataProvider getMockForAbstractClassExpectsInvalidArgumentExceptionDataprovider
* @ covers PHPUnit_Framework_MockObject_Generator :: getMockForAbstractClass
* @ expectedException PHPUnit_Framework_Exception
*/
public function testGetMockForAbstractClassExpectingInvalidArgumentException ( $className , $mockClassName )
{
$mock = $this -> generator -> getMockForAbstractClass ( $className , array (), $mockClassName );
}
/**
* @ covers PHPUnit_Framework_MockObject_Generator :: getMockForAbstractClass
* @ expectedException PHPUnit_Framework_MockObject_RuntimeException
*/
public function testGetMockForAbstractClassAbstractClassDoesNotExist ()
{
$mock = $this -> generator -> getMockForAbstractClass ( 'Tux' );
}
/**
* Dataprovider for test " testGetMockForAbstractClassExpectingInvalidArgumentException "
*/
public static function getMockForAbstractClassExpectsInvalidArgumentExceptionDataprovider ()
{
return array (
'className not a string' => array ( array (), '' ),
'mockClassName not a string' => array ( 'Countable' , new StdClass ),
);
}
/**
* @ covers PHPUnit_Framework_MockObject_Generator :: getMockForTrait
* @ requires PHP 5.4 . 0
*/
public function testGetMockForTraitWithNonExistentMethodsAndNonAbstractMethods ()
{
$mock = $this -> generator -> getMockForTrait (
2015-10-08 11:40:12 -07:00
'AbstractTrait' ,
array (),
'' ,
true ,
true ,
true ,
array ( 'nonexistentMethod' )
2015-08-17 17:00:26 -07:00
);
$this -> assertTrue ( method_exists ( $mock , 'nonexistentMethod' ));
$this -> assertTrue ( method_exists ( $mock , 'doSomething' ));
$this -> assertTrue ( $mock -> mockableMethod ());
$this -> assertTrue ( $mock -> anotherMockableMethod ());
}
/**
* @ covers PHPUnit_Framework_MockObject_Generator :: getMockForTrait
* @ requires PHP 5.4 . 0
*/
public function testGetMockForTraitStubbingAbstractMethod ()
{
$mock = $this -> generator -> getMockForTrait ( 'AbstractTrait' );
$this -> assertTrue ( method_exists ( $mock , 'doSomething' ));
}
/**
* @ requires PHP 5.4 . 0
*/
public function testGetMockForSingletonWithReflectionSuccess ()
{
// Probably, this should be moved to tests/autoload.php
require_once __DIR__ . '/_fixture/SingletonClass.php' ;
$mock = $this -> generator -> getMock ( 'SingletonClass' , array ( 'doSomething' ), array (), '' , false );
$this -> assertInstanceOf ( 'SingletonClass' , $mock );
}
/**
* Same as " testGetMockForSingletonWithReflectionSuccess " , but we expect
* warning for PHP < 5.4 . 0 since PHPUnit will try to execute private __wakeup
* on unserialize
*/
public function testGetMockForSingletonWithUnserializeFail ()
{
if ( version_compare ( PHP_VERSION , '5.4.0' , '>=' )) {
$this -> markTestSkipped ( 'Only for PHP < 5.4.0' );
}
$this -> setExpectedException ( 'PHPUnit_Framework_MockObject_RuntimeException' );
// Probably, this should be moved to tests/autoload.php
require_once __DIR__ . '/_fixture/SingletonClass.php' ;
$mock = $this -> generator -> getMock ( 'SingletonClass' , array ( 'doSomething' ), array (), '' , false );
}
2015-10-08 11:40:12 -07:00
/**
* ReflectionClass :: getMethods for SoapClient on PHP 5.3 produces PHP Fatal Error
* @ runInSeparateProcess
*/
public function testGetMockForSoapClientReflectionMethodsDuplication ()
{
if ( version_compare ( PHP_VERSION , '5.4.0' , '>=' )) {
$this -> markTestSkipped ( 'Only for PHP < 5.4.0' );
}
$mock = $this -> generator -> getMock ( 'SoapClient' , array (), array (), '' , false );
$this -> assertInstanceOf ( 'SoapClient' , $mock );
}
2015-08-17 17:00:26 -07:00
}