我正在尝试使用Codeception在测试框架中获取一个Symfony控制器。每个方法都以以下方式开始:
public function saveAction(Request $request, $id)
{
// Entity management
/** @var EntityManager $em */
$em = $this->getDoctrine()->getManager();
/* Actual code here
...
*/
}
public function submitAction(Request $request, $id)
{
// Entity management
/** @var EntityManager $em */
$em = $this->getDoctrine()->getManager();
/* 200+ lines of procedural code here
...
*/
}
我已经尝试过:
$request = \Symfony\Component\HttpFoundation\Request::create(
$uri, $method, $parameters, $cookies, $files, $server, $content);
$my_controller = new MyController();
$my_controller->submitAction($request, $id);
从我的单元测试中,我发现Symfony在后台进行了大量其他设置,这些设置我不知道。每次我找到一个缺失的对象并初始化它时,就会有另一个对象在某个时候失败。
我还尝试通过PhpStorm逐步执行测试,但是PhpUnit有一些输出会导致Symfony在它接近我要测试的代码之前死机,因为它无法在任何输出发生后启动
$ _SESSION
。我不认为这种情况发生在命令行,但我还没有足够接近可以确定。我该如何简单而可扩展地在Unit Test中运行此代码?
一些背景:
我继承了此代码。我知道它很肮脏,因为它在控制器中执行模型逻辑。我知道我所要求的不是“纯”单元测试,因为它触及了几乎整个应用程序。
但是我需要能够自动运行这个“小”(200+行)代码。代码应该在不到几秒钟内运行。我不知道需要多长时间,因为我从未能够独立运行它。
目前,通过网站运行此代码的设置时间非常长,并且也很复杂。这段代码不会生成网页,它基本上是一个API调用,生成文件。我需要能够在短时间内生成任意数量的这些测试文件,因为我正在进行编码更改。
代码就是它所是的。我的工作是能够对其进行更改,而目前我甚至无法在没有巨大开销的情况下运行它。不知道它在做什么就对它进行更改是不负责任的。