单元测试控制器做法


Unit testing controllers practices

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

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
   }
}

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

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

查看本文以获取更多详细信息

希望这个帮助

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