控制器单元测试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次