单元测试控制器实践

时间:2015-01-11 16:30:59

标签: php unit-testing symfony

我应该如何对控制器进行单元测试?首先,我嘲笑数据库结果,这很清楚。但那又怎样?我应该从控制器重写代码,并测试针对模拟的所有查询吗?或者更确切地说调用控制器类,并测试整体结果?我的意思是,例如,有这个课程:

class User {

   public function foo()
   {
      // query 1
      // query 2
      return $someresults;
   }

}

我应该这样测试一下:

class TestUser {

   public testFoo()
   {
      // query1
      // assertions
      // query2
      // assertions
      // results asserions
   }

}

或者更像是:

class TestUser {

   public function testFoo()
   {
      $user = new User($mockEntityManager);
      // assertions on $user object
   }

}

这样做的正确方法是什么?测试所有查询会使代码加倍,并在存储库类中生成外部查询的问题(不确定我是否可以模拟它)。测试一般结果是可以的,但控制器中的方法返回视图模板,因此我不确定如何在那里测试数据库响应。

2 个答案:

答案 0 :(得分:0)

恕我直言,最好的方法是将控制器定义为服务(如here所述),因此您不需要使用webcrawler来处理请求/响应,而只需要与他的trhow模拟服务进行交互。

查看this article了解更多详情

希望这个帮助

答案 1 :(得分:0)

您不应该对控制器进行单元测试,因为它们本身不包含任何逻辑。您应该对它们进行功能测试,以便验证它的行为符合您的需要。