我有以下问题:
我想测试控制器,如果在调度期间没有异常,但控制器使用具有自己的phpunit
测试的外部库。这个库也使用外部库和自己的测试等等......
所以我的应用程序看起来与此图类似:
request -> router -> dispatch -> controller -> view
如果在此过程中发生任何错误。应用程序抛出异常。我想测试控制器,但是现在我必须编写+50行代码来模拟所需的所有对象。
例如我将表单从控制器传递到view
的图像
在view
我有这样的事情:
<?php echo $form->openTag('form'); ?>
<?php echo $form->openTag('fieldset'); ?>
<?php echo $form->label('firstName'); ?>
<?php echo $form->input('firstName'); ?>
<?php echo $form->errorMessages('firstName'); ?>
<?php echo $form->closeTag('fieldset'); ?>
<?php echo $form->openTag('fieldset'); ?>
<?php echo $form->label('gender'); ?>
<?php echo $form->radio('gender'); ?>
<?php echo $form->errorMessages('gender'); ?>
<?php echo $form->closeTag('gender'); ?>
...
<?php echo $form->closeTag('form'); ?>
我们说我的表格有20个输入......你明白了吗?我必须模拟此表单的所有可用方法才能通过我的测试。
可以使用所有有效方法模拟对象吗?
我的意思是,如果有一种方法来模拟所有方法都有效的类?无需定义任何内容
如果应用程序需要类A
的对象,它将返回类A
的对象
如果应用程序需要数组,它将返回数组
等。
答案 0 :(得分:0)
我们对您的应用程序上下文知之甚少,但默认情况下$this->createMock(Some::class)
会创建整个类的模拟 - 无需模拟每个方法。然后,您只能将行为定义为某些方法,而这只是模拟的整个过程。所以在你的情况下,我猜你的表格类,你必须将它设置为视图。
但我会问你在测试什么?如果您正在测试表单是否会抛出异常,您不会想要模拟它,而是执行它并检查异常。