我对Symfony 4.2应用程序进行了许多边缘到边缘测试。这里我指的是使用测试客户端进行Web请求,然后对结果进行断言的测试。示例:
public function testPageNotFound() {
$client = $this->createClient();
$client->request('GET', 'does-not-exist');
$this->assertSame(404, $client->getResponse()->getStatusCode());
}
在此类测试中,是否有方法更改服务容器中的特定服务?
示例问题:我的服务通过名为FileFetcher
的抽象来发出web请求。对于我的测试,我希望使用NullFileFetcher
,这样就不会发出真正的web请求。我如何告诉Symfony使用此双重测试?
令人惊讶的是,在主测试留档中没有关于如何执行此基本测试任务的信息https://symfony.com/doc/current/testing.html.
我尝试的一种方法是在配置/包/测试/services.yaml中配置。这不起作用,据我所知是由Symfony不允许覆盖services.yaml引起的,因为它加载了主config/services.yaml
last:https://symfony.com/doc/current/configuration.html#configuration-environments
最后,我只想遵循一些非常基本的测试最佳实践:
任何使用Symfony的代码示例都将不胜感激。
您应该能够通过在容器中交换服务来覆盖测试中的服务
$this->container->getDefinition('x.x_service')->setSynthetic(true);
$this->container->set('x.x_service', new NullFileFetcher());
文档需要更新:覆盖以前定义的最后一个文件是config/services\u test。yaml将帮助您解决您的用例。看见https://github.com/symfony/recipes/blob/master/symfony/framework-bundle/4.2/src/Kernel.php#L42
问题内容: 我已经看过一些教程和基本示例,但是我很难为控制器编写单元测试。我已经看到了一些代码片段,它们实例化了控制器并让angular注入了对象,该对象又被用来为控制器创建一个新对象。但是我不知道为什么吗? 未定义 : 我最终使用了变量,而不是变量,但是在我的第一个测试中,我不知道如何在控制器中对 功能变量 进行单元测试: 控制器: 单元测试损坏: 这就是我得到的 TypeError:对象#没有
有没有可能使控制器依赖于他们的服务,而不是通过使用服务容器,而是通过纯粹的构造函数依赖注入? 我希望以这种方式编写控制器: 不幸的是,正如我所看到的,Symfony ControllerResolver不通过ServiceContainer而是通过简单的调用创建新的控制器实例。
在我的夸克应用程序中,我在一个单独的gradle项目/模块中实现了存储库,部分原因是我希望能够确保单元测试不使用数据库等。 问题是,如果我想在测试中使用任何注入的依赖项,我需要使用@QuarkusTest,然后构建或启动确保满足所有依赖项。 有没有一种方法不涉及模仿每一个外部依赖,例如。? < li >运行测试时,不要在构建或启动期间强制依赖关系,而是在运行时让它出错(如果被访问)。 < li >
这个问题已经发布了等价的api测试依赖在Gradle?但我看不出有什么解决办法。 我们声明的依赖项很少,如下所示 我们想把这些暴露给这个库的消费者。由于是testImplementation,消费者需要显式地声明这些依赖关系,而这些依赖关系是我们想要避免的。
我正在努力理解数据依赖和控制依赖之间的区别。 所以我看到的一个例子是: 数据依赖性,例如,指令使用另一条指令创建的数据 控制依赖性,例如,指令等待更新的reg进行比较 我很难理解的是,例如在beq,我等待登记簿更新,但我也依赖于他的数据。 所以我不知道如何知道它们之间的区别。
我无法使用ArchUnit制定以下测试: 我想确保某个包中的所有类只访问应用程序基包之外或某个子包内的类(“或”而不是“xor”)。 我得到的是: 问题是,或条件应该在onlyAccessClassesthat()中。如果一个类同时具有两种类型的访问权限,上述公式将失败,我希望这两种类型都有效。 我怎样才能实现我想要的?谢谢你在这方面的任何帮助...