模拟PHPUnit中的所有有效方法

时间:2017-03-17 09:41:49

标签: php unit-testing phpunit

我有以下问题:
我想测试控制器,如果在调度期间没有异常,但控制器使用具有自己的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的对象 如果应用程序需要数组,它将返回数组
等。

1 个答案:

答案 0 :(得分:0)

我们对您的应用程序上下文知之甚少,但默认情况下$this->createMock(Some::class)会创建整个类的模拟 - 无需模拟每个方法。然后,您只能将行为定义为某些方法,而这只是模拟的整个过程。所以在你的情况下,我猜你的表格类,你必须将它设置为视图。

但我会问你在测试什么?如果您正在测试表单是否会抛出异常,您不会想要模拟它,而是执行它并检查异常。