问题标签 [mockery]
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 - 测试 __call 方法
如何测试该__call
方法以确保$method
在我的有效方法列表中?现在这就是我所做的;
我得到的错误是call_user_func_array()
.
php - 嘲弄先抛出,然后在第二次调用时返回值
不幸的是,它只返回 true 而不会首先抛出异常。如何在第一次调用时抛出异常,然后在第二次调用该方法时返回值?
编辑:
如果我手动编辑Mockery\Expectation.php
和设置$_throw
= true
.
php - 如何使用 Mockery 部分模拟课程?
我有这堂课:
而这个测试:
如果我 var_dump($m) 我看到模拟的方法:
但是当测试执行时,它调用的不是模拟的,而是真实的。除非我重命名
然后我得到一个绿色。
任何人都可以向我展示使用 Mockery 进行部分模拟的正确方法吗?
php - 运行 phpunit 时类不接受模拟依赖项
我在我的测试中模拟了两个依赖项,我将它们传递给类 AlertsMessageBag 的类构造函数。但是 php 会抛出错误,我传递了错误的依赖(Mockery\Mock)。当我运行 phpunit 时会发生这种情况。
错误:
1) 传递给 Prologue\Alerts\AlertsMessageBag::__construct() 的 AlertsMessageBagTest::testAddByLevel 参数 1 必须是 Illuminate\Session\Store 的实例,给定的 Mockery\Mock 的实例,在 /Users/Gebruiker/Sites/tests/workbench 中调用/workbench/prologue/alerts/tests/AlertsMessageBagTest.php 在第 18 行并在 /Users/Gebruiker/Sites/tests/workbench/workbench/prologue/alerts/src/Prologue/Alerts/AlertsMessageBag.php:31 /Users/Gebruiker 中定义/Sites/tests/workbench/workbench/prologue/alerts/tests/AlertsMessageBagTest.php:18
我的测试:
AlertsMessageBag 类:
我只是不明白为什么会这样。我究竟做错了什么?
phpunit - Mocking Illuminate\Database\Eloquent\Model
I need to mock Laravel's Eloquent\Model with Mockery and it is kind of tricky because it uses static methods.
I solved this issue with the following code but I wonder if there is a better/smarter way to do this.
unit-testing - 实例模拟和隐式构造函数
我正在尝试在管理数据库连接的类上使用 TDD。然而
- 我经常远离数据库可用的网络进行开发
- 我只想测试不与真实连接混淆的类,即使是 SQLite
:memory:
- 我可能想以独立于平台的方式测试连接(例如,将 PDO 对象交换为 MySQLi 对象等)。尤其是数据库不全是 MySQL,有些是 SQLServer。
基本上我想这样做:
在我的测试运行器中:
不知何故,我想使用 PDO 类的模拟。我唯一的选择是向测试类构造函数或其方法之一添加显式参数吗?我已经尝试按照 Mockery 文档使用“实例模拟”,但由于我使用自动加载导致“致命错误无法重新声明类”(duh)。
我不想用纯粹用于测试的代码污染合同,但这是我唯一的选择吗?
谢谢你的帮助
unit-testing - 如何将 JSON 传递给单元测试的路由?
我通过模拟控制器期望的存储库来对我的 Laravel 4 控制器进行单元测试。问题在于“商店”功能。当我对给定的控制器进行 POST 时,这是 Laravel 调用的函数。该函数被调用,但它应该itemData
作为输入,但我不知道如何提供。这是我尝试过的:
ItemEntryController
测试班
laravel - 有没有更好的方法来编写这个测试?
我对使用 Laravel 和 Mockery 进行单元测试还很陌生,我编写了以下测试。它通过并且似乎有效。但是,我认为它可能可以以更好的方式编写。似乎测试比实现更容易出错。有没有更好的方法来做到这一点?
ItemModelTest.php
项目.php
类别.php*
php - 使用 Hamcrest 的 hasKeyValuePair 和 laravel 的单元测试
我有以下测试:
当我运行此测试时,我收到以下错误:
Hamcrest 显然已安装,因为测试不会抱怨不知道是什么hasKeyValuePair()
。但我想它没有做我认为应该做的事情。我重写了它以使用 Hamcrest 的anything()
方法,如下所示:
我得到同样的错误。但是,使用Mockery::any()
作品:
我在想我没有正确安装 Mockery 或 Hamcrest。他们在一起打得不好。这是我的composer.json:
知道发生了什么吗?
php - 如何以特定顺序实际运行 PHPUnit 测试
这个问题:按特定顺序运行 PHPUnit 测试有一个我同意的公认答案,但设计问题在于 PHP 和 PHPUnit。
我正在测试的项目使用 ZF2 和 Doctrine。AbstractHttpControllerTestCase 有一个方法“dispatch”,它实例化一个 ZF2 应用程序并完成创建响应对象的所有步骤。这些测试使用@covers 进行注释,以确保在测试期间运行请求不会覆盖其他方法。请求可能涉及调用视图助手的视图脚本,这些视图助手使用各种服务,因此模拟给定请求期间使用的所有服务变得不可行(并且此代码对于每个测试的复制和维护将变得乏味)。
PHPUnit 能够在单独的进程中运行测试,它通过派生一个新的 PHP 实例并为其提供已编译的代码模板(奇怪的东西)来做到这一点。然后它将包括由 get_included_files() 列出的所有文件,其中包括曾经命中自动加载器的所有文件。即使禁用了 preserveGlobalState,它仍然会包含新流程中所有先前测试所涉及的所有内容。
一些依赖项(通过 composer 安装)使用静态方法、标记为 final 的类或两者兼而有之。静态方法可以被 PHPUnit 模拟,最终类必须使用 Mockery 重载,因为 PHPUnit 将完全拒绝创建最终类的模拟对象。重载类和函数(使用命名空间技巧)必须在单独的进程中完成,以免影响后续测试。到目前为止,一切都很好。
输入一个重载依赖项的测试,以设置对静态方法的期望(在一个可能或可能不会被标记为 final 的类上),或者对尚未实例化的对象设置期望。这只有在之前的测试都没有触及类以重载并设置期望时才有效,否则它将因“无法重新声明类”错误而失败。PHPUnit 试图提供帮助,并在子流程中包含了重新创建测试环境的所有内容,但结果破坏了测试用例。
因此,用例如“@group isolated”标记测试并让这些测试在任何其他测试之前运行而不必调用 PHPUnit 两次(除了不便之外,它会破坏覆盖率分析)将非常有用。
或者,如果有一种方法可以覆盖 PHP 5.5 中已经存在的类,这将允许遭受攻击的测试用例修复其先决条件。但这可能不会发生(runkit 在任何情况下都不是可接受的答案)。