问题标签 [prophecy]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
php - PHPUnit mock 更快,不重复代码
我想问你写单元测试的实践,如何模拟对象而不重复代码?
我正在使用 Symfony2 框架,例如我有许多带有自定义验证器的捆绑包。当我和我的团队的其他成员编写单元测试时,我们重复模拟 Constraint、ExecutionContext、ConstraintViolationBuilderInterface 的代码。我知道我们可以创建特征或抽象类或其他东西,我们可以在其中存储负责模拟的代码,但在我开始这样做之前,我想了解您的最佳实践。
我的第一个想法是创建一个类/特征,它将存储例如所有存储库的模拟。例子:
然后在实际测试用例中使用此代码:
当然这只是我想象的伪代码,我的第一个想法。你有什么想法?
基本上我在问如何更快地编写单元测试并且不重复代码?
php - 指定一个实例化某些东西的类
假设我有我指定的这个类(遵循 BDD 方法)
并LoggedMessage
定义如下
Message
有时我的规范示例会由于规范中实例化的日期与类中的日期不一致而失败Logger
。
问题一:我的代码中是否有异味,所以我是否需要创建一个协作者(即:一个工厂)并将其注入Logger
以创建一个新的LoggedMessage
?
问题二:如果不需要注入新的合作者,我如何确保我的规范每次都能正常工作,并且不会由于日期时间差异而随机失败?
php - 如何使用 PhpUnit 和 Prophecy 测试将可调用对象作为参数的方法
我正在使用 Guzzle 的异步请求,并将它们实现在我现在想测试的服务中。
我的方法看起来像这样(伪,所以如果它不是100%有效,请原谅)
现在我想测试它,但我真的不知道如何模拟可调用对象,因为我总是收到错误
1) tzfrs\PlayerBundle\Tests\Api\Player\PlayerServiceTest::testGetPlayer
Prophecy\Exception\InvalidArgumentException: Expected callable or instance of PromiseInterface, but got object.
这就是我目前实施的方式
没用。和这个
$this->returnCallback(function (ResponseInterface $response) use (&$player){})
也没有用。同样的错误。当只是尝试一个虚拟回调时
$promise->then(function(){});
我得到了错误Error: Call to a member function then() on string
,即使->reveal()
在先承诺之后也是如此。有任何想法吗?
php - PHPUnit - 模拟一个特征
我有一个被多个类使用的特征,即
PHP 单元能够模拟 traitFunction()?。
在此先感谢您的帮助。
问候
php - 在 Prophecy 中禁用构造函数
我有一个尝试使用 Prophecy 模拟的 Symfony 类。但是,当我显示该类时,它会执行构造函数。下面是示例代码:
返回异常
这对我来说没有意义,因为 Prophecy 应该自动禁用构造函数?
php - php单元测试中的预言、模拟比较和期望
我有一个测试失败,同时将预言中的一些接口和模拟结果与 phpunit 进行比较:
这些是结果:
任何帮助将不胜感激。谢谢。
下一段代码是我正在测试的代码。
laravel - 如何在 PHPUnit 中为当前的测试类做预言?
我有这种情况,我想运行 PHPUnit 测试并检查当前测试类的行为,如下所示:
这甚至可能吗?
我当然得到
unit-testing - 如何为 PHPUnit 的预言对象提供属性?
我正在用Prophecy模拟一个 API 。
对 api 对象的调用payments()
将返回一个具有get($id)
方法的对象,该方法返回另一个具有一些方法和属性的对象。属性之一是 ID,我想测试这就是我所期望的。
在不模拟任何东西的情况下,使用实时 API,这可能会起作用:
为了模拟 API,我将其设置为:
但是我不知道如何为reveal()
-ed 模拟支付对象提供公共 ID 属性,以及如何将其设置为传入的 ID ( 12345
)?
编辑:简化问题。
我有一个无法更改且不想测试的第 3 方 API。它返回某些对象类的实例,其中包含通过公共属性和 getter 的混合可用的数据。
苏特:
我想测试:
php - 未调用 PHP Prophecy Stub 方法
我无法通过这个明显的测试。Foo 在其构造函数中得到一个 Bar,当调用 Foo::m() 时,Bar::bar() 被调用。
Prophecy 无法以某种方式注册对 Bar::bar() 的调用...