Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.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
Php 单元测试实践_Php_Unit Testing_Symfony - Fatal编程技术网

Php 单元测试实践

Php 单元测试实践,php,unit-testing,symfony,Php,Unit Testing,Symfony,我应该如何对控制器进行单元测试?首先,我模拟数据库结果,这很清楚。那又怎么样?我是否应该重写控制器中的代码,并针对模拟测试所有查询?或者调用控制器类,并测试总体结果?我的意思是,例如,有这样一门课: class User { public function foo() { // query 1 // query 2 return $someresults; } } 我是否应该这样测试它: class TestUser { pub

我应该如何对控制器进行单元测试?首先,我模拟数据库结果,这很清楚。那又怎么样?我是否应该重写控制器中的代码,并针对模拟测试所有查询?或者调用控制器类,并测试总体结果?我的意思是,例如,有这样一门课:

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
   }

}

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

最好的方法是将控制器定义为服务(如上所述),这样您就不需要webcrawler来处理请求/响应,而只需要与他的trhow模拟服务交互

查看更多详细信息


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

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