You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
201 lines
6.6 KiB
201 lines
6.6 KiB
4 years ago
|
<?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(
|
||
|
'AbstractMockTestClass',
|
||
|
array(),
|
||
|
'',
|
||
|
true,
|
||
|
true,
|
||
|
true,
|
||
|
array('nonexistentMethod')
|
||
|
);
|
||
|
|
||
|
$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(
|
||
|
'AbstractTrait',
|
||
|
array(),
|
||
|
'',
|
||
|
true,
|
||
|
true,
|
||
|
true,
|
||
|
array('nonexistentMethod')
|
||
|
);
|
||
|
|
||
|
$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);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 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);
|
||
|
}
|
||
|
}
|