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); } }