问题标签 [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.

0 投票
1 回答
368 浏览

php - 测试 __call 方法

如何测试该__call方法以确保$method在我的有效方法列表中?现在这就是我所做的;

我得到的错误是call_user_func_array().

0 投票
1 回答
5845 浏览

php - 嘲弄先抛出,然后在第二次调用时返回值

不幸的是,它只返回 true 而不会首先抛出异常。如何在第一次调用时抛出异常,然后在第二次调用该方法时返回值?

编辑

如果我手动编辑Mockery\Expectation.php和设置$_throw = true.

0 投票
1 回答
3348 浏览

php - 如何使用 Mockery 部分模拟课程?

我有这堂课:

而这个测试:

如果我 var_dump($m) 我看到模拟的方法:

但是当测试执行时,它调用的不是模拟的,而是真实的。除非我重命名

然后我得到一个绿色。

任何人都可以向我展示使用 Mockery 进行部分模拟的正确方法吗?

0 投票
1 回答
1840 浏览

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 类:

我只是不明白为什么会这样。我究竟做错了什么?

0 投票
1 回答
1524 浏览

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.

0 投票
1 回答
299 浏览

unit-testing - 实例模拟和隐式构造函数

我正在尝试在管理数据库连接的类上使用 TDD。然而

  • 我经常远离数据库可用的网络进行开发
  • 我只想测试不与真实连接混淆的类,即使是 SQLite:memory:
  • 我可能想以独立于平台的方式测试连接(例如,将 PDO 对象交换为 MySQLi 对象等)。尤其是数据库不全是 MySQL,有些是 SQLServer。

基本上我想这样做:

在我的测试运行器中:

不知何故,我想使用 PDO 类的模拟。我唯一的选择是向测试类构造函数或其方法之一添加显式参数吗?我已经尝试按照 Mockery 文档使用“实例模拟”,但由于我使用自动加载导致“致命错误无法重新声明类”(duh)。

我不想用纯粹用于测试的代码污染合同,但这是我唯一的选择吗?

谢谢你的帮助

0 投票
1 回答
1107 浏览

unit-testing - 如何将 JSON 传递给单元测试的路由?

我通过模拟控制器期望的存储库来对我的 Laravel 4 控制器进行单元测试。问题在于“商店”功能。当我对给定的控制器进行 POST 时,这是 Laravel 调用的函数。该函数被调用,但它应该itemData作为输入,但我不知道如何提供。这是我尝试过的:

ItemEntryController

测试班

0 投票
1 回答
423 浏览

laravel - 有没有更好的方法来编写这个测试?

我对使用 Laravel 和 Mockery 进行单元测试还很陌生,我编写了以下测试。它通过并且似乎有效。但是,我认为它可能可以以更好的方式编写。似乎测试比实现更容易出错。有没有更好的方法来做到这一点?

ItemModelTest.php

项目.php

类别.php*

0 投票
2 回答
532 浏览

php - 使用 Hamcrest 的 hasKeyValuePair 和 laravel 的单元测试

我有以下测试:

当我运行此测试时,我收到以下错误:

Hamcrest 显然已安装,因为测试不会抱怨不知道是什么hasKeyValuePair()。但我想它没有做我认为应该做的事情。我重写了它以使用 Hamcrest 的anything()方法,如下所示:

我得到同样的错误。但是,使用Mockery::any()作品:

我在想我没有正确安装 Mockery 或 Hamcrest。他们在一起打得不好。这是我的composer.json:

知道发生了什么吗?

0 投票
0 回答
861 浏览

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 在任何情况下都不是可接受的答案)。