【问题标题】:Unit testing controllers practices单元测试控制器实践
【发布时间】:2015-01-11 16:30:59
【问题描述】:

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

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
   }

}

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

【问题讨论】:

  • 可能的答案太多,或者对于这种格式来说,好的答案太长了。请添加详细信息以缩小答案范围或隔离可以在几段中回答的问题。

标签: php unit-testing symfony


【解决方案1】:

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

查看this article了解更多详情

希望有帮助

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-12
      • 2017-06-26
      • 2011-12-01
      • 2014-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多