mockApplication([ 'container' => [ 'definitions' => [ Dispatcher::className() => DispatcherMock::className(), ], ], 'bootstrap' => ['log'], ]); $this->assertInstanceOf(DispatcherMock::className(), Yii::$app->log); } public function testBootstrap() { Yii::getLogger()->flush(); $this->mockApplication([ 'components' => [ 'withoutBootstrapInterface' => [ 'class' => Component::className() ], 'withBootstrapInterface' => [ 'class' => BootstrapComponentMock::className() ] ], 'modules' => [ 'moduleX' => [ 'class' => Module::className() ] ], 'bootstrap' => [ 'withoutBootstrapInterface', 'withBootstrapInterface', 'moduleX', function () { } ], ]); $this->assertSame('Bootstrap with yii\base\Component', Yii::getLogger()->messages[0][0]); $this->assertSame('Bootstrap with yiiunit\framework\base\BootstrapComponentMock::bootstrap()', Yii::getLogger()->messages[1][0]); $this->assertSame('Loading module: moduleX', Yii::getLogger()->messages[2][0]); $this->assertSame('Bootstrap with yii\base\Module', Yii::getLogger()->messages[3][0]); $this->assertSame('Bootstrap with Closure', Yii::getLogger()->messages[4][0]); } } class DispatcherMock extends Dispatcher { } class BootstrapComponentMock extends Component implements BootstrapInterface { public function bootstrap($app) { } }