我现在正在开发我的应用程序,我想集成单元测试。如果可能的话,我想测试应用程序中已经编写的控制器方法
答案 0 :(得分:0)
您可以对控制器进行单元测试,就像对任何其他类的方法进行单元测试一样。
想象一下以下控制器:
/**
* @Route("/foo")
*/
class FooController extends AbstractController
{
/**
* @var SomeDependency
*/
private $someDependency;
public function __construct(SomeDependency $someDependency)
{
$this->someDependency = $someDependency;
}
/**
* @Route("/bar/{id}", name="foo_bar")
*/
public function bar($id)
{
$result = $this->someDependency->someMethod($id)
if (null === $result) {
return new Response('Error', Response::HTTP_NOT_FOUND);
}
return new Response($result, Response::HTTP_OK);
}
}
对于此示例,您可以编写以下单元测试(用任何其他模拟框架替换Mockery
):
public function testFooBar()
{
// Mock dependencies
$mockDependency = \Mockery::mock(SomeDependency::class);
$mockDependency
->shouldReceive('someMethod')
->andReturn('Some result');
// Create controller
$fooController = new FooController($mockDependency);
// Act
$response = $fooController->bar(1);
// Assert
$this->assertEquals(200, $response->getStatusCode());
}
按照here所述使用WebTestCase
:
class FooControllerTest extends WebTestCase
{
public function testFooBar()
{
$client = static::createClient();
$client->request('GET', '/foo/bar/1');
$this->assertEquals(200, $client->getResponse()->getStatusCode());
}
}
您可能希望在执行这些测试之前加载一些Fixtures
,因为在大多数情况下它们需要有效的数据。看看DoctrineFixturesBundle
here。
答案 1 :(得分:-1)
像此示例一样首先进行路由
/**
* @Route("/order", name="order_display")
*/
public function displayAction()
您可以测试它,只需使用路由变量打开localhost
localhost:8000 /订单