PHPUnit assert no method is called
Yes, it's quite simple, try this:
$classA->expects($this->never())->method($this->anything());
You can use method MockBuilder::disableAutoReturnValueGeneration
.
For example, in your test overwrite default TestCase::getMockBuilder
:
/** * @param string $className * @return MockBuilder */ public function getMockBuilder($className): MockBuilder { // this is to make sure, that not-mocked method will not be called return parent::getMockBuilder($className) ->disableAutoReturnValueGeneration(); }
Advantages:
- all your mocks won't be expected to call anything than mocked methods. No need to bind
->expects(self::never())->method(self::anything())
to all of them - you still can set new mocks. After
->expects(self::never())->method(self::anything())
you can't
Works for PhpUnit v7.5.4 (and probably, later ones).
you could also mock a method and a data provider, and make sure it never is called. without making any assertions, because it is not called, it means it has passed the test.
<?php /** * @dataProvider dataProvider */ public function checkSomethingIsDisabled( $message, $config, $expected) { $debugMock = $this->getMockBuilder('APP_Class_Name') ->disableOriginalConstructor() ->setMethods(array('_helper')) ->getMock(); $debugMock = $this->getPublicClass($debugMock); $debugMock->_config = $config; $viewContent = new stdClass; $debugMock->_functionToTest($viewContent); } public function dataProvider() { return [ 'dataset'=> [ 'message' => 'Debug Disabled', 'config' => (object) array( 'values' => (object) array( 'valueThatWhenFalseDoesntExecuteFunc'=> false ) ), // in a probably needed complimentary "imaginary" test we probably // will have the valueThatWhenFalseDoesntExecuteFunc set to true and on // expected more information to handle and test. 'expected' => null ] ]; }