Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
控制器单元测试symfony2_Symfony_Phpunit - Fatal编程技术网

控制器单元测试symfony2

控制器单元测试symfony2,symfony,phpunit,Symfony,Phpunit,我是新的单元测试用例,我有一个函数 /** * Creates a new Blog entity. * * @Route("/", name="blog_create") * @Method("POST") * @Template("AppBundle:Blog:new.html.twig") */ public function createAction(Request $request) { $entity = new Blog(); $form = $thi

我是新的单元测试用例,我有一个函数

 /**
 * Creates a new Blog entity.
 *
 * @Route("/", name="blog_create")
 * @Method("POST")
 * @Template("AppBundle:Blog:new.html.twig")
 */
public function createAction(Request $request)
{
    $entity = new Blog();
    $form = $this->createCreateForm($entity);
    $form->handleRequest($request);

    if ($form->isValid()) {
        $em = $this->getDoctrine()->getManager();
        $em->persist($entity);
        $em->flush();

        return $this->redirect($this->generateUrl('blog_show', array('id' => $entity->getId())));
    }

    return array(
        'entity' => $entity,
        'form'   => $form->createView(),
    );
} // End of method
这将创建数据库中的条目。问题是,我无法编写一个测试用例来验证表单提交的输入,即使我尝试创建控制器的对象并将实体传递给该对象。我不知道如何在测试用例中创建控制器对象,并且 如何验证输入表单和视图,有什么想法吗?
.

可能尝试将控制器实例化为部分模拟。在这种情况下,这将允许您“覆盖”某些功能

创建表单 重新使用 格特学说 发电机 您可以重写这些方法,让它们返回模拟版本或测试控制的对象。在重定向的情况下,您可以给出方法期望值

$controller=$this->getMock “我的控制器”, 大堆 “CreateForm”, “重定向”, "格特主义",, “发电机”
;

也许只是单元测试你的验证而已。你读过那篇文章开头的评论了吗?对控制器进行单元测试是没有意义的。尝试功能测试IMHO我不认为单元测试控制器是不合适的。功能测试很重要,但对于测试一整套边界条件来说,功能测试并不那么好。功能测试最适合测试一条“快乐”路径和一条“不快乐”路径,有效地测试层之间的“粘合剂”是否起作用。的确,控制器应该尽可能的瘦,所以不应该有太多的逻辑,但总有一些,如问题中所示。这显然有赞成和反对的论据,但我认为直截了当的“不要这样做”没有多大帮助。当我验证这个控制器方法时,它会显示错误$controller->expected$this->$this->any->method'redirect';方法应被调用1次,实际调用0次