我应该如何对控制器进行单元测试?首先,我嘲笑数据库结果,这很清楚。但那又怎样?我应该从控制器重写代码,并测试针对模拟的所有查询吗?或者更确切地说调用控制器类,并测试整体结果?我的意思是,例如,有这个课程:
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
}
}
这样做的正确方法是什么?测试所有查询会使代码加倍,并在存储库类中生成外部查询的问题(不确定我是否可以模拟它)。测试一般结果是可以的,但控制器中的方法返回视图模板,因此我不确定如何在那里测试数据库响应。
答案 0 :(得分:0)
恕我直言,最好的方法是将控制器定义为服务(如here所述),因此您不需要使用webcrawler来处理请求/响应,而只需要与他的trhow模拟服务进行交互。
查看this article了解更多详情
希望这个帮助
答案 1 :(得分:0)
您不应该对控制器进行单元测试,因为它们本身不包含任何逻辑。您应该对它们进行功能测试,以便验证它的行为符合您的需要。