Chris@0: Chris@0: * Chris@0: * For the full copyright and license information, please view the LICENSE Chris@0: * file that was distributed with this source code. Chris@0: */ Chris@0: Chris@14: use PHPUnit\Framework\TestCase; Chris@14: use PHPUnit\Framework\MockObject\MockBuilder; Chris@14: Chris@14: class MockBuilderTest extends TestCase Chris@0: { Chris@0: public function testMockBuilderRequiresClassName() Chris@0: { Chris@14: $mock = $this->getMockBuilder(Mockable::class)->getMock(); Chris@14: Chris@0: $this->assertTrue($mock instanceof Mockable); Chris@0: } Chris@0: Chris@0: public function testByDefaultMocksAllMethods() Chris@0: { Chris@14: $mock = $this->getMockBuilder(Mockable::class)->getMock(); Chris@14: Chris@0: $this->assertNull($mock->mockableMethod()); Chris@0: $this->assertNull($mock->anotherMockableMethod()); Chris@0: } Chris@0: Chris@0: public function testMethodsToMockCanBeSpecified() Chris@0: { Chris@14: $mock = $this->getMockBuilder(Mockable::class) Chris@14: ->setMethods(['mockableMethod']) Chris@14: ->getMock(); Chris@14: Chris@0: $this->assertNull($mock->mockableMethod()); Chris@0: $this->assertTrue($mock->anotherMockableMethod()); Chris@0: } Chris@0: Chris@14: public function testMethodExceptionsToMockCanBeSpecified() Chris@14: { Chris@14: $mock = $this->getMockBuilder(Mockable::class) Chris@14: ->setMethodsExcept(['mockableMethod']) Chris@14: ->getMock(); Chris@14: Chris@14: $this->assertTrue($mock->mockableMethod()); Chris@14: $this->assertNull($mock->anotherMockableMethod()); Chris@14: } Chris@14: Chris@14: public function testEmptyMethodExceptionsToMockCanBeSpecified() Chris@14: { Chris@14: $mock = $this->getMockBuilder(Mockable::class) Chris@14: ->setMethodsExcept() Chris@14: ->getMock(); Chris@14: Chris@14: $this->assertNull($mock->mockableMethod()); Chris@14: $this->assertNull($mock->anotherMockableMethod()); Chris@14: } Chris@14: Chris@0: public function testByDefaultDoesNotPassArgumentsToTheConstructor() Chris@0: { Chris@14: $mock = $this->getMockBuilder(Mockable::class)->getMock(); Chris@14: Chris@14: $this->assertEquals([null, null], $mock->constructorArgs); Chris@0: } Chris@0: Chris@0: public function testMockClassNameCanBeSpecified() Chris@0: { Chris@14: $mock = $this->getMockBuilder(Mockable::class) Chris@14: ->setMockClassName('ACustomClassName') Chris@14: ->getMock(); Chris@14: Chris@0: $this->assertTrue($mock instanceof ACustomClassName); Chris@0: } Chris@0: Chris@0: public function testConstructorArgumentsCanBeSpecified() Chris@0: { Chris@14: $mock = $this->getMockBuilder(Mockable::class) Chris@14: ->setConstructorArgs([23, 42]) Chris@14: ->getMock(); Chris@14: Chris@14: $this->assertEquals([23, 42], $mock->constructorArgs); Chris@0: } Chris@0: Chris@0: public function testOriginalConstructorCanBeDisabled() Chris@0: { Chris@14: $mock = $this->getMockBuilder(Mockable::class) Chris@14: ->disableOriginalConstructor() Chris@14: ->getMock(); Chris@14: Chris@0: $this->assertNull($mock->constructorArgs); Chris@0: } Chris@0: Chris@0: public function testByDefaultOriginalCloneIsPreserved() Chris@0: { Chris@14: $mock = $this->getMockBuilder(Mockable::class) Chris@14: ->getMock(); Chris@14: Chris@0: $cloned = clone $mock; Chris@14: Chris@0: $this->assertTrue($cloned->cloned); Chris@0: } Chris@0: Chris@0: public function testOriginalCloneCanBeDisabled() Chris@0: { Chris@14: $mock = $this->getMockBuilder(Mockable::class) Chris@14: ->disableOriginalClone() Chris@14: ->getMock(); Chris@14: Chris@0: $mock->cloned = false; Chris@14: $cloned = clone $mock; Chris@14: Chris@0: $this->assertFalse($cloned->cloned); Chris@0: } Chris@0: Chris@0: public function testProvidesAFluentInterface() Chris@0: { Chris@14: $spec = $this->getMockBuilder(Mockable::class) Chris@14: ->setMethods(['mockableMethod']) Chris@14: ->setConstructorArgs([]) Chris@0: ->setMockClassName('DummyClassName') Chris@0: ->disableOriginalConstructor() Chris@0: ->disableOriginalClone() Chris@0: ->disableAutoload(); Chris@14: Chris@14: $this->assertTrue($spec instanceof MockBuilder); Chris@0: } Chris@0: }