2015-08-17 17:00:26 -07:00
< ? php
/*
* This file is part of the PHPUnit_MockObject package .
*
* ( c ) Sebastian Bergmann < sebastian @ phpunit . de >
*
* For the full copyright and license information , please view the LICENSE
* file that was distributed with this source code .
*/
/**
*
*
* @ since Class available since Release 3.0 . 0
*/
class Framework_MockObjectTest extends PHPUnit_Framework_TestCase
{
public function testMockedMethodIsNeverCalled ()
{
$mock = $this -> getMock ( 'AnInterface' );
$mock -> expects ( $this -> never ())
-> method ( 'doSomething' );
}
public function testMockedMethodIsNeverCalledWithParameter ()
{
$mock = $this -> getMock ( 'SomeClass' );
$mock -> expects ( $this -> never ())
-> method ( 'doSomething' )
-> with ( 'someArg' );
}
public function testMockedMethodIsNotCalledWhenExpectsAnyWithParameter ()
{
$mock = $this -> getMock ( 'SomeClass' );
$mock -> expects ( $this -> any ())
-> method ( 'doSomethingElse' )
-> with ( 'someArg' );
}
public function testMockedMethodIsNotCalledWhenMethodSpecifiedDirectlyWithParameter ()
{
$mock = $this -> getMock ( 'SomeClass' );
$mock -> method ( 'doSomethingElse' )
-> with ( 'someArg' );
}
public function testMockedMethodIsCalledAtLeastOnce ()
{
$mock = $this -> getMock ( 'AnInterface' );
$mock -> expects ( $this -> atLeastOnce ())
-> method ( 'doSomething' );
$mock -> doSomething ();
}
public function testMockedMethodIsCalledAtLeastOnce2 ()
{
$mock = $this -> getMock ( 'AnInterface' );
$mock -> expects ( $this -> atLeastOnce ())
-> method ( 'doSomething' );
$mock -> doSomething ();
$mock -> doSomething ();
}
public function testMockedMethodIsCalledAtLeastTwice ()
{
$mock = $this -> getMock ( 'AnInterface' );
$mock -> expects ( $this -> atLeast ( 2 ))
-> method ( 'doSomething' );
$mock -> doSomething ();
$mock -> doSomething ();
}
public function testMockedMethodIsCalledAtLeastTwice2 ()
{
$mock = $this -> getMock ( 'AnInterface' );
$mock -> expects ( $this -> atLeast ( 2 ))
-> method ( 'doSomething' );
$mock -> doSomething ();
$mock -> doSomething ();
$mock -> doSomething ();
}
public function testMockedMethodIsCalledAtMostTwice ()
{
$mock = $this -> getMock ( 'AnInterface' );
$mock -> expects ( $this -> atMost ( 2 ))
-> method ( 'doSomething' );
$mock -> doSomething ();
$mock -> doSomething ();
}
public function testMockedMethodIsCalledAtMosttTwice2 ()
{
$mock = $this -> getMock ( 'AnInterface' );
$mock -> expects ( $this -> atMost ( 2 ))
-> method ( 'doSomething' );
$mock -> doSomething ();
}
public function testMockedMethodIsCalledOnce ()
{
$mock = $this -> getMock ( 'AnInterface' );
$mock -> expects ( $this -> once ())
-> method ( 'doSomething' );
$mock -> doSomething ();
}
public function testMockedMethodIsCalledOnceWithParameter ()
{
$mock = $this -> getMock ( 'SomeClass' );
$mock -> expects ( $this -> once ())
-> method ( 'doSomethingElse' )
-> with ( $this -> equalTo ( 'something' ));
$mock -> doSomethingElse ( 'something' );
}
public function testMockedMethodIsCalledExactly ()
{
$mock = $this -> getMock ( 'AnInterface' );
$mock -> expects ( $this -> exactly ( 2 ))
-> method ( 'doSomething' );
$mock -> doSomething ();
$mock -> doSomething ();
}
public function testStubbedException ()
{
$mock = $this -> getMock ( 'AnInterface' );
$mock -> expects ( $this -> any ())
-> method ( 'doSomething' )
-> will ( $this -> throwException ( new Exception ));
try {
$mock -> doSomething ();
} catch ( Exception $e ) {
return ;
}
$this -> fail ();
}
public function testStubbedWillThrowException ()
{
$mock = $this -> getMock ( 'AnInterface' );
$mock -> expects ( $this -> any ())
-> method ( 'doSomething' )
-> willThrowException ( new Exception );
try {
$mock -> doSomething ();
} catch ( Exception $e ) {
return ;
}
$this -> fail ();
}
public function testStubbedReturnValue ()
{
$mock = $this -> getMock ( 'AnInterface' );
$mock -> expects ( $this -> any ())
-> method ( 'doSomething' )
-> will ( $this -> returnValue ( 'something' ));
$this -> assertEquals ( 'something' , $mock -> doSomething ());
$mock = $this -> getMock ( 'AnInterface' );
$mock -> expects ( $this -> any ())
-> method ( 'doSomething' )
-> willReturn ( 'something' );
$this -> assertEquals ( 'something' , $mock -> doSomething ());
}
public function testStubbedReturnValueMap ()
{
$map = array (
array ( 'a' , 'b' , 'c' , 'd' ),
array ( 'e' , 'f' , 'g' , 'h' )
);
$mock = $this -> getMock ( 'AnInterface' );
$mock -> expects ( $this -> any ())
-> method ( 'doSomething' )
-> will ( $this -> returnValueMap ( $map ));
$this -> assertEquals ( 'd' , $mock -> doSomething ( 'a' , 'b' , 'c' ));
$this -> assertEquals ( 'h' , $mock -> doSomething ( 'e' , 'f' , 'g' ));
2015-10-08 11:40:12 -07:00
$this -> assertEquals ( null , $mock -> doSomething ( 'foo' , 'bar' ));
2015-08-17 17:00:26 -07:00
$mock = $this -> getMock ( 'AnInterface' );
$mock -> expects ( $this -> any ())
-> method ( 'doSomething' )
-> willReturnMap ( $map );
$this -> assertEquals ( 'd' , $mock -> doSomething ( 'a' , 'b' , 'c' ));
$this -> assertEquals ( 'h' , $mock -> doSomething ( 'e' , 'f' , 'g' ));
2015-10-08 11:40:12 -07:00
$this -> assertEquals ( null , $mock -> doSomething ( 'foo' , 'bar' ));
2015-08-17 17:00:26 -07:00
}
public function testStubbedReturnArgument ()
{
$mock = $this -> getMock ( 'AnInterface' );
$mock -> expects ( $this -> any ())
-> method ( 'doSomething' )
-> will ( $this -> returnArgument ( 1 ));
$this -> assertEquals ( 'b' , $mock -> doSomething ( 'a' , 'b' ));
$mock = $this -> getMock ( 'AnInterface' );
$mock -> expects ( $this -> any ())
-> method ( 'doSomething' )
-> willReturnArgument ( 1 );
$this -> assertEquals ( 'b' , $mock -> doSomething ( 'a' , 'b' ));
}
public function testFunctionCallback ()
{
2015-10-08 11:40:12 -07:00
$mock = $this -> getMock ( 'SomeClass' , array ( 'doSomething' ), array (), '' , false );
2015-08-17 17:00:26 -07:00
$mock -> expects ( $this -> once ())
-> method ( 'doSomething' )
-> will ( $this -> returnCallback ( 'functionCallback' ));
$this -> assertEquals ( 'pass' , $mock -> doSomething ( 'foo' , 'bar' ));
2015-10-08 11:40:12 -07:00
$mock = $this -> getMock ( 'SomeClass' , array ( 'doSomething' ), array (), '' , false );
2015-08-17 17:00:26 -07:00
$mock -> expects ( $this -> once ())
-> method ( 'doSomething' )
-> willReturnCallback ( 'functionCallback' );
$this -> assertEquals ( 'pass' , $mock -> doSomething ( 'foo' , 'bar' ));
}
public function testStubbedReturnSelf ()
{
$mock = $this -> getMock ( 'AnInterface' );
$mock -> expects ( $this -> any ())
-> method ( 'doSomething' )
-> will ( $this -> returnSelf ());
$this -> assertEquals ( $mock , $mock -> doSomething ());
$mock = $this -> getMock ( 'AnInterface' );
$mock -> expects ( $this -> any ())
-> method ( 'doSomething' )
-> willReturnSelf ();
$this -> assertEquals ( $mock , $mock -> doSomething ());
}
public function testStubbedReturnOnConsecutiveCalls ()
{
$mock = $this -> getMock ( 'AnInterface' );
$mock -> expects ( $this -> any ())
-> method ( 'doSomething' )
-> will ( $this -> onConsecutiveCalls ( 'a' , 'b' , 'c' ));
$this -> assertEquals ( 'a' , $mock -> doSomething ());
$this -> assertEquals ( 'b' , $mock -> doSomething ());
$this -> assertEquals ( 'c' , $mock -> doSomething ());
$mock = $this -> getMock ( 'AnInterface' );
$mock -> expects ( $this -> any ())
-> method ( 'doSomething' )
-> willReturnOnConsecutiveCalls ( 'a' , 'b' , 'c' );
$this -> assertEquals ( 'a' , $mock -> doSomething ());
$this -> assertEquals ( 'b' , $mock -> doSomething ());
$this -> assertEquals ( 'c' , $mock -> doSomething ());
}
public function testStaticMethodCallback ()
{
2015-10-08 11:40:12 -07:00
$mock = $this -> getMock ( 'SomeClass' , array ( 'doSomething' ), array (), '' , false );
2015-08-17 17:00:26 -07:00
$mock -> expects ( $this -> once ())
-> method ( 'doSomething' )
-> will ( $this -> returnCallback ( array ( 'MethodCallback' , 'staticCallback' )));
$this -> assertEquals ( 'pass' , $mock -> doSomething ( 'foo' , 'bar' ));
}
public function testPublicMethodCallback ()
{
2015-10-08 11:40:12 -07:00
$mock = $this -> getMock ( 'SomeClass' , array ( 'doSomething' ), array (), '' , false );
2015-08-17 17:00:26 -07:00
$mock -> expects ( $this -> once ())
-> method ( 'doSomething' )
-> will ( $this -> returnCallback ( array ( new MethodCallback , 'nonStaticCallback' )));
$this -> assertEquals ( 'pass' , $mock -> doSomething ( 'foo' , 'bar' ));
}
public function testMockClassOnlyGeneratedOnce ()
{
$mock1 = $this -> getMock ( 'AnInterface' );
$mock2 = $this -> getMock ( 'AnInterface' );
$this -> assertEquals ( get_class ( $mock1 ), get_class ( $mock2 ));
}
public function testMockClassDifferentForPartialMocks ()
{
$mock1 = $this -> getMock ( 'PartialMockTestClass' );
$mock2 = $this -> getMock ( 'PartialMockTestClass' , array ( 'doSomething' ));
$mock3 = $this -> getMock ( 'PartialMockTestClass' , array ( 'doSomething' ));
$mock4 = $this -> getMock ( 'PartialMockTestClass' , array ( 'doAnotherThing' ));
$mock5 = $this -> getMock ( 'PartialMockTestClass' , array ( 'doAnotherThing' ));
$this -> assertNotEquals ( get_class ( $mock1 ), get_class ( $mock2 ));
$this -> assertNotEquals ( get_class ( $mock1 ), get_class ( $mock3 ));
$this -> assertNotEquals ( get_class ( $mock1 ), get_class ( $mock4 ));
$this -> assertNotEquals ( get_class ( $mock1 ), get_class ( $mock5 ));
$this -> assertEquals ( get_class ( $mock2 ), get_class ( $mock3 ));
$this -> assertNotEquals ( get_class ( $mock2 ), get_class ( $mock4 ));
$this -> assertNotEquals ( get_class ( $mock2 ), get_class ( $mock5 ));
$this -> assertEquals ( get_class ( $mock4 ), get_class ( $mock5 ));
}
public function testMockClassStoreOverrulable ()
{
$mock1 = $this -> getMock ( 'PartialMockTestClass' );
$mock2 = $this -> getMock ( 'PartialMockTestClass' , array (), array (), 'MyMockClassNameForPartialMockTestClass1' );
$mock3 = $this -> getMock ( 'PartialMockTestClass' );
$mock4 = $this -> getMock ( 'PartialMockTestClass' , array ( 'doSomething' ), array (), 'AnotherMockClassNameForPartialMockTestClass' );
$mock5 = $this -> getMock ( 'PartialMockTestClass' , array (), array (), 'MyMockClassNameForPartialMockTestClass2' );
$this -> assertNotEquals ( get_class ( $mock1 ), get_class ( $mock2 ));
$this -> assertEquals ( get_class ( $mock1 ), get_class ( $mock3 ));
$this -> assertNotEquals ( get_class ( $mock1 ), get_class ( $mock4 ));
$this -> assertNotEquals ( get_class ( $mock2 ), get_class ( $mock3 ));
$this -> assertNotEquals ( get_class ( $mock2 ), get_class ( $mock4 ));
$this -> assertNotEquals ( get_class ( $mock2 ), get_class ( $mock5 ));
$this -> assertNotEquals ( get_class ( $mock3 ), get_class ( $mock4 ));
$this -> assertNotEquals ( get_class ( $mock3 ), get_class ( $mock5 ));
$this -> assertNotEquals ( get_class ( $mock4 ), get_class ( $mock5 ));
}
/**
* @ covers PHPUnit_Framework_MockObject_Generator :: getMock
*/
public function testGetMockWithFixedClassNameCanProduceTheSameMockTwice ()
{
$mock = $this -> getMockBuilder ( 'StdClass' ) -> setMockClassName ( 'FixedName' ) -> getMock ();
$mock = $this -> getMockBuilder ( 'StdClass' ) -> setMockClassName ( 'FixedName' ) -> getMock ();
$this -> assertInstanceOf ( 'StdClass' , $mock );
}
public function testOriginalConstructorSettingConsidered ()
{
$mock1 = $this -> getMock ( 'PartialMockTestClass' );
2015-10-08 11:40:12 -07:00
$mock2 = $this -> getMock ( 'PartialMockTestClass' , array (), array (), '' , false );
2015-08-17 17:00:26 -07:00
$this -> assertTrue ( $mock1 -> constructorCalled );
$this -> assertFalse ( $mock2 -> constructorCalled );
}
public function testOriginalCloneSettingConsidered ()
{
$mock1 = $this -> getMock ( 'PartialMockTestClass' );
2015-10-08 11:40:12 -07:00
$mock2 = $this -> getMock ( 'PartialMockTestClass' , array (), array (), '' , true , false );
2015-08-17 17:00:26 -07:00
$this -> assertNotEquals ( get_class ( $mock1 ), get_class ( $mock2 ));
}
public function testGetMockForAbstractClass ()
{
$mock = $this -> getMock ( 'AbstractMockTestClass' );
$mock -> expects ( $this -> never ())
-> method ( 'doSomething' );
}
public function traversableProvider ()
{
return array (
array ( 'Traversable' ),
array ( '\Traversable' ),
array ( 'TraversableMockTestInterface' ),
array ( array ( 'Traversable' )),
array ( array ( 'Iterator' , 'Traversable' )),
array ( array ( '\Iterator' , '\Traversable' ))
);
}
/**
* @ dataProvider traversableProvider
*/
public function testGetMockForTraversable ( $type )
{
$mock = $this -> getMock ( $type );
$this -> assertInstanceOf ( 'Traversable' , $mock );
}
public function testMultipleInterfacesCanBeMockedInSingleObject ()
{
$mock = $this -> getMock ( array ( 'AnInterface' , 'AnotherInterface' ));
$this -> assertInstanceOf ( 'AnInterface' , $mock );
$this -> assertInstanceOf ( 'AnotherInterface' , $mock );
}
/**
* @ requires PHP 5.4 . 0
*/
public function testGetMockForTrait ()
{
$mock = $this -> getMockForTrait ( 'AbstractTrait' );
$mock -> expects ( $this -> never ()) -> method ( 'doSomething' );
$parent = get_parent_class ( $mock );
2015-10-08 11:40:12 -07:00
$traits = class_uses ( $parent , false );
2015-08-17 17:00:26 -07:00
$this -> assertContains ( 'AbstractTrait' , $traits );
}
public function testClonedMockObjectShouldStillEqualTheOriginal ()
{
$a = $this -> getMock ( 'stdClass' );
$b = clone $a ;
$this -> assertEquals ( $a , $b );
}
public function testMockObjectsConstructedIndepentantlyShouldBeEqual ()
{
$a = $this -> getMock ( 'stdClass' );
$b = $this -> getMock ( 'stdClass' );
$this -> assertEquals ( $a , $b );
}
public function testMockObjectsConstructedIndepentantlyShouldNotBeTheSame ()
{
$a = $this -> getMock ( 'stdClass' );
$b = $this -> getMock ( 'stdClass' );
$this -> assertNotSame ( $a , $b );
}
public function testClonedMockObjectCanBeUsedInPlaceOfOriginalOne ()
{
$x = $this -> getMock ( 'stdClass' );
$y = clone $x ;
$mock = $this -> getMock ( 'stdClass' , array ( 'foo' ));
$mock -> expects ( $this -> once ()) -> method ( 'foo' ) -> with ( $this -> equalTo ( $x ));
$mock -> foo ( $y );
}
public function testClonedMockObjectIsNotIdenticalToOriginalOne ()
{
$x = $this -> getMock ( 'stdClass' );
$y = clone $x ;
$mock = $this -> getMock ( 'stdClass' , array ( 'foo' ));
$mock -> expects ( $this -> once ()) -> method ( 'foo' ) -> with ( $this -> logicalNot ( $this -> identicalTo ( $x )));
$mock -> foo ( $y );
}
public function testObjectMethodCallWithArgumentCloningEnabled ()
{
$expectedObject = new StdClass ;
$mock = $this -> getMockBuilder ( 'SomeClass' )
-> setMethods ( array ( 'doSomethingElse' ))
-> enableArgumentCloning ()
-> getMock ();
$actualArguments = array ();
$mock -> expects ( $this -> any ())
-> method ( 'doSomethingElse' )
-> will ( $this -> returnCallback ( function () use ( & $actualArguments ) {
$actualArguments = func_get_args ();
}));
$mock -> doSomethingElse ( $expectedObject );
$this -> assertEquals ( 1 , count ( $actualArguments ));
$this -> assertEquals ( $expectedObject , $actualArguments [ 0 ]);
$this -> assertNotSame ( $expectedObject , $actualArguments [ 0 ]);
}
public function testObjectMethodCallWithArgumentCloningDisabled ()
{
$expectedObject = new StdClass ;
$mock = $this -> getMockBuilder ( 'SomeClass' )
-> setMethods ( array ( 'doSomethingElse' ))
-> disableArgumentCloning ()
-> getMock ();
$actualArguments = array ();
$mock -> expects ( $this -> any ())
-> method ( 'doSomethingElse' )
-> will ( $this -> returnCallback ( function () use ( & $actualArguments ) {
$actualArguments = func_get_args ();
}));
$mock -> doSomethingElse ( $expectedObject );
$this -> assertEquals ( 1 , count ( $actualArguments ));
$this -> assertSame ( $expectedObject , $actualArguments [ 0 ]);
}
public function testArgumentCloningOptionGeneratesUniqueMock ()
{
$mockWithCloning = $this -> getMockBuilder ( 'SomeClass' )
-> setMethods ( array ( 'doSomethingElse' ))
-> enableArgumentCloning ()
-> getMock ();
$mockWithoutCloning = $this -> getMockBuilder ( 'SomeClass' )
-> setMethods ( array ( 'doSomethingElse' ))
-> disableArgumentCloning ()
-> getMock ();
$this -> assertNotEquals ( $mockWithCloning , $mockWithoutCloning );
}
public function testVerificationOfMethodNameFailsWithoutParameters ()
{
2015-10-08 11:40:12 -07:00
$mock = $this -> getMock ( 'SomeClass' , array ( 'right' , 'wrong' ), array (), '' , true , true , true );
2015-08-17 17:00:26 -07:00
$mock -> expects ( $this -> once ())
-> method ( 'right' );
$mock -> wrong ();
try {
$mock -> __phpunit_verify ();
$this -> fail ( 'Expected exception' );
} catch ( PHPUnit_Framework_ExpectationFailedException $e ) {
$this -> assertSame (
" Expectation failed for method name is equal to <string:right> when invoked 1 time(s). \n "
. " Method was expected to be called 1 times, actually called 0 times. \n " ,
$e -> getMessage ()
);
}
$this -> resetMockObjects ();
}
public function testVerificationOfMethodNameFailsWithParameters ()
{
2015-10-08 11:40:12 -07:00
$mock = $this -> getMock ( 'SomeClass' , array ( 'right' , 'wrong' ), array (), '' , true , true , true );
2015-08-17 17:00:26 -07:00
$mock -> expects ( $this -> once ())
-> method ( 'right' );
$mock -> wrong ();
try {
$mock -> __phpunit_verify ();
$this -> fail ( 'Expected exception' );
} catch ( PHPUnit_Framework_ExpectationFailedException $e ) {
$this -> assertSame (
" Expectation failed for method name is equal to <string:right> when invoked 1 time(s). \n "
. " Method was expected to be called 1 times, actually called 0 times. \n " ,
$e -> getMessage ()
);
}
$this -> resetMockObjects ();
}
public function testVerificationOfMethodNameFailsWithWrongParameters ()
{
2015-10-08 11:40:12 -07:00
$mock = $this -> getMock ( 'SomeClass' , array ( 'right' , 'wrong' ), array (), '' , true , true , true );
2015-08-17 17:00:26 -07:00
$mock -> expects ( $this -> once ())
-> method ( 'right' )
-> with ( array ( 'first' , 'second' ));
try {
$mock -> right ( array ( 'second' ));
} catch ( PHPUnit_Framework_ExpectationFailedException $e ) {
$this -> assertSame (
" Expectation failed for method name is equal to <string:right> when invoked 1 time(s) \n "
. " Parameter 0 for invocation SomeClass::right(Array (...)) does not match expected value. \n "
. " Failed asserting that two arrays are equal. " ,
$e -> getMessage ()
);
}
try {
$mock -> __phpunit_verify ();
$this -> fail ( 'Expected exception' );
} catch ( PHPUnit_Framework_ExpectationFailedException $e ) {
$this -> assertSame (
" Expectation failed for method name is equal to <string:right> when invoked 1 time(s). \n "
. " Parameter 0 for invocation SomeClass::right(Array (...)) does not match expected value. \n "
. " Failed asserting that two arrays are equal. \n "
. " --- Expected \n "
. " +++ Actual \n "
. " @@ @@ \n "
. " Array ( \n "
. " - 0 => 'first' \n "
. " - 1 => 'second' \n "
. " + 0 => 'second' \n "
. " ) \n " ,
$e -> getMessage ()
);
}
$this -> resetMockObjects ();
}
public function testVerificationOfNeverFailsWithEmptyParameters ()
{
2015-10-08 11:40:12 -07:00
$mock = $this -> getMock ( 'SomeClass' , array ( 'right' , 'wrong' ), array (), '' , true , true , true );
2015-08-17 17:00:26 -07:00
$mock -> expects ( $this -> never ())
-> method ( 'right' )
-> with ();
try {
$mock -> right ();
$this -> fail ( 'Expected exception' );
} catch ( PHPUnit_Framework_ExpectationFailedException $e ) {
$this -> assertSame (
'SomeClass::right() was not expected to be called.' ,
$e -> getMessage ()
);
}
$this -> resetMockObjects ();
}
public function testVerificationOfNeverFailsWithAnyParameters ()
{
2015-10-08 11:40:12 -07:00
$mock = $this -> getMock ( 'SomeClass' , array ( 'right' , 'wrong' ), array (), '' , true , true , true );
2015-08-17 17:00:26 -07:00
$mock -> expects ( $this -> never ())
-> method ( 'right' )
-> withAnyParameters ();
try {
$mock -> right ();
$this -> fail ( 'Expected exception' );
} catch ( PHPUnit_Framework_ExpectationFailedException $e ) {
$this -> assertSame (
'SomeClass::right() was not expected to be called.' ,
$e -> getMessage ()
);
}
$this -> resetMockObjects ();
}
/**
* @ ticket 199
*/
public function testWithAnythingInsteadOfWithAnyParameters ()
{
2015-10-08 11:40:12 -07:00
$mock = $this -> getMock ( 'SomeClass' , array ( 'right' ), array (), '' , true , true , true );
2015-08-17 17:00:26 -07:00
$mock -> expects ( $this -> once ())
-> method ( 'right' )
-> with ( $this -> anything ());
try {
$mock -> right ();
$this -> fail ( 'Expected exception' );
} catch ( PHPUnit_Framework_ExpectationFailedException $e ) {
$this -> assertSame (
" Expectation failed for method name is equal to <string:right> when invoked 1 time(s) \n " .
" Parameter count for invocation SomeClass::right() is too low. \n " .
" To allow 0 or more parameters with any value, omit ->with() or use ->withAnyParameters() instead. " ,
$e -> getMessage ()
);
}
$this -> resetMockObjects ();
}
/**
* See https :// github . com / sebastianbergmann / phpunit - mock - objects / issues / 81
*/
public function testMockArgumentsPassedByReference ()
{
$foo = $this -> getMockBuilder ( 'MethodCallbackByReference' )
-> setMethods ( array ( 'bar' ))
-> disableOriginalConstructor ()
-> disableArgumentCloning ()
-> getMock ();
$foo -> expects ( $this -> any ())
-> method ( 'bar' )
-> will ( $this -> returnCallback ( array ( $foo , 'callback' )));
$a = $b = $c = 0 ;
$foo -> bar ( $a , $b , $c );
$this -> assertEquals ( 1 , $b );
}
/**
* See https :// github . com / sebastianbergmann / phpunit - mock - objects / issues / 81
*/
public function testMockArgumentsPassedByReference2 ()
{
$foo = $this -> getMockBuilder ( 'MethodCallbackByReference' )
-> disableOriginalConstructor ()
-> disableArgumentCloning ()
-> getMock ();
$foo -> expects ( $this -> any ())
-> method ( 'bar' )
-> will ( $this -> returnCallback (
2015-10-08 11:40:12 -07:00
function ( & $a , & $b , $c ) {
$b = 1 ;
}
2015-08-17 17:00:26 -07:00
));
$a = $b = $c = 0 ;
$foo -> bar ( $a , $b , $c );
$this -> assertEquals ( 1 , $b );
}
/**
* https :// github . com / sebastianbergmann / phpunit - mock - objects / issues / 116
*/
public function testMockArgumentsPassedByReference3 ()
{
$foo = $this -> getMockBuilder ( 'MethodCallbackByReference' )
-> setMethods ( array ( 'bar' ))
-> disableOriginalConstructor ()
-> disableArgumentCloning ()
-> getMock ();
$a = new stdClass ();
$b = $c = 0 ;
$foo -> expects ( $this -> any ())
-> method ( 'bar' )
-> with ( $a , $b , $c )
-> will ( $this -> returnCallback ( array ( $foo , 'callback' )));
$foo -> bar ( $a , $b , $c );
}
/**
* https :// github . com / sebastianbergmann / phpunit / issues / 796
*/
public function testMockArgumentsPassedByReference4 ()
{
$foo = $this -> getMockBuilder ( 'MethodCallbackByReference' )
-> setMethods ( array ( 'bar' ))
-> disableOriginalConstructor ()
-> disableArgumentCloning ()
-> getMock ();
$a = new stdClass ();
$b = $c = 0 ;
$foo -> expects ( $this -> any ())
-> method ( 'bar' )
-> with ( $this -> isInstanceOf ( " stdClass " ), $b , $c )
-> will ( $this -> returnCallback ( array ( $foo , 'callback' )));
$foo -> bar ( $a , $b , $c );
}
/**
* @ requires extension soap
*/
public function testCreateMockFromWsdl ()
{
$mock = $this -> getMockFromWsdl ( __DIR__ . '/_fixture/GoogleSearch.wsdl' , 'WsdlMock' );
$this -> assertStringStartsWith (
'Mock_WsdlMock_' ,
get_class ( $mock )
);
}
/**
* @ requires extension soap
*/
public function testCreateNamespacedMockFromWsdl ()
{
$mock = $this -> getMockFromWsdl ( __DIR__ . '/_fixture/GoogleSearch.wsdl' , 'My\\Space\\WsdlMock' );
$this -> assertStringStartsWith (
'Mock_WsdlMock_' ,
get_class ( $mock )
);
}
/**
* @ requires extension soap
*/
public function testCreateTwoMocksOfOneWsdlFile ()
{
$mock = $this -> getMockFromWsdl ( __DIR__ . '/_fixture/GoogleSearch.wsdl' );
$mock = $this -> getMockFromWsdl ( __DIR__ . '/_fixture/GoogleSearch.wsdl' );
}
/**
* @ see https :// github . com / sebastianbergmann / phpunit - mock - objects / issues / 156
* @ ticket 156
*/
public function testInterfaceWithStaticMethodCanBeStubbed ()
{
$this -> assertInstanceOf (
'InterfaceWithStaticMethod' ,
$this -> getMock ( 'InterfaceWithStaticMethod' )
);
}
/**
* @ expectedException PHPUnit_Framework_MockObject_BadMethodCallException
*/
public function testInvokingStubbedStaticMethodRaisesException ()
{
$mock = $this -> getMock ( 'ClassWithStaticMethod' );
$mock -> staticMethod ();
}
/**
* @ see https :// github . com / sebastianbergmann / phpunit - mock - objects / issues / 171
* @ ticket 171
*/
public function testStubForClassThatImplementsSerializableCanBeCreatedWithoutInvokingTheConstructor ()
{
$this -> assertInstanceOf (
'ClassThatImplementsSerializable' ,
$this -> getMockBuilder ( 'ClassThatImplementsSerializable' )
-> disableOriginalConstructor ()
-> getMock ()
);
}
private function resetMockObjects ()
{
$refl = new ReflectionObject ( $this );
$refl = $refl -> getParentClass ();
$prop = $refl -> getProperty ( 'mockObjects' );
$prop -> setAccessible ( true );
$prop -> setValue ( $this , array ());
}
}