问题标签 [phpunit]

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 投票
2 回答
458 浏览

php - 如何在运行测试时停止 Zend_Db_Table_Abstract fetchrow 返回垃圾数据?

我对 Zend 还很陌生,在创建单元测试时遇到了一些困难。我已经将它剥离为一个最小的测试类,它仍然可以复制问题,希望这是我正在做的一些愚蠢的事情:

受保护的$db;

公共函数 __construct($name = NULL) { parent::__construct ( $name );

$this->db = Zend_Db::factory('Pdo_Mysql', array('host' => '127.0.0.1', 'username' => 'root', 'password' => 'xxxxxxxx', 'dbname' = > 'testingdb' ));

Zend_Db_Table_Abstract::setDefaultAdapter($this->db); }

公共函数 testName() { $users = new Users(); $select = $users->select()->where('regCode = ?', 'deadbeef'); $row = $users->fetchRow($select); }

所以这是简化的测试。我有一个数据库设置(正确连接),里面有数据。有一条 regCode 设置为“deadbeef”的记录,它还有电子邮件、regDate 和附属公司的字段:

我有一个名为 Users.php 的类,它非常简单:

我的问题是我可以很好地插入数据库,但是任何查询都会返回奇怪的结果。上面的 fetchRow 生成正确的 SQL,但返回的行是垃圾 - 它返回包含 regCode、email、根本没有 regDate 列的行,然后附属公司在那里,但该列被称为“用户”而不是“附属公司”。

我已经在其他表上尝试过,但没有任何效果 - 有些甚至将数据库名称作为列标题返回,并将表名称作为列返回。

需要注意的一件事是,如果我不在测试中运行它,它可以正常工作。正确的应用程序中完全相同的代码和数据库工作得很好,但是作为 phpUnit 测试运行并且它变得很棘手:-(

任何建议表示赞赏

干杯,布林

0 投票
1 回答
200 浏览

php - PHPUnit,测试“表现得像...”

我有一系列 PHPUnit 测试来验证一个类“A 类”。
我有另一个类,“B 类”,它扩展了 A 类。

有没有一种很好的方法来测试“B 类通过 A 类的测试”,或者换句话说“B 类的行为类似于 A 类”而不复制测试代码?

我可以测试扩展(使用 instanceof),但这似乎是一个误导性测试。
我关心它的行为类似于 A 类,而不是它扩展 A 类,对吗?还是错了?

0 投票
5 回答
11452 浏览

php - 使用 PHPUnit 处理路径问题

我刚刚开始使用 PHPUnit,但遇到了一些障碍。

我的代码使用 $_SERVER['DOCUMENT_ROOT'] 来计算包含的路径,当我的 apache 服务器是运行 PHP 的服务器时有效,但是当我使用“phpunit Tests”从命令行运行 phpunit 时未设置 DOCUMENT_ROOT,因此这些包括不工作。

我在 PHPUnit 的配置中遗漏了什么吗?它应该以某种方式与apache集成吗?

0 投票
1 回答
333 浏览

php - 运行 PHPUnit selense HTML 文件时如何仅与 rc 服务器创建 1 个会话

我的网站有一个登录页面,因此需要先登录才能运行每个 HTML selense 测试文件。PHPUnit 框架的工作方式是通过独立运行每个测试来创建独立的测试用例,这意味着它Setup()在每个测试用例上调用该函数 --> 然后调用 Selenium RC Server --> 然后创建会话 ID。我的代码如下。

0 投票
2 回答
298 浏览

sql - 如何配置 PHPUnit 以登录到测试数据库?

我正在尝试研究如何配置 PHPUnit 以使用此 wiki 页面上描述的“测试数据库”:http ://www.phpunit.de/wiki/TestDatabase但是我找不到任何有关如何启用的文档并配置它。

有没有人有任何想法?

谢谢

0 投票
2 回答
8052 浏览

phpunit - 测试是否调用了受保护的方法

我正在尝试测试是否在公共接口中调用了受保护的方法。

我知道它被正确调用,但 PHPUnit 说它从未被调用。

当我以另一种方式测试时,同样会发生同样的情况,即永远不会调用方法:

该方法被调用,但 PHPUnit 说它不是。

我做错了什么?

编辑 我没有用双冒号声明我的方法,只是为了表示它是一个公共方法(接口)。更新为完整的类/方法声明。

编辑 2 我应该说我正在测试抽象类中的一些方法实现(编辑代码以反映这一点)。由于我无法实例化该类,我该如何测试呢?

我正在考虑创建一个SomeClassSimple扩展SomeClassAbstract和测试这个。这是正确的方法吗?

0 投票
2 回答
692 浏览

php - 在 windows 和 linux 上运行单元测试

有没有一种方法可以在 linux 和 windows 上有效地运行单元测试( phpunit )?

我需要这样做,因为系统的某些部分仅在 linux 下可用,但我确实希望能够在我的 IDE 中运行测试套件的某些部分,顺便说一下netbeans

我遇到的问题大部分时间都与路径有关。为了使事情更复杂,我还打算从phing内部运行测试。

但我还没有解决的是为不同平台定制不同测试套件的能力。这甚至可能吗?

测试基本上位于 test 目录中,而源代码位于 src 中。包含路径由包含文件处理。是否可以使用自动加载器来处理不同的目录结构?

0 投票
1 回答
11367 浏览

php - 在 PHPUnit 模拟对象中配置多个方法

我正在尝试在 PHP 和 PHPUnit 中创建一个模拟对象。到目前为止,我有这个:

暂时忽略我令人毛骨悚然的模棱两可的对象名称,我知道我所做的是
- 创建了一个模拟对象,具有 2 个配置方法,
- 配置了“get_events”方法以返回一个空白数组,以及
- 将模拟放入构造函数。

我现在想做的是配置第二种方法,但我找不到任何解释如何做到这一点的东西。我想做类似的事情

或类似的,但这不起作用。我该怎么做?

切线地,如果我需要配置多个测试方法,这是否表明我的代码结构很差?

0 投票
4 回答
4052 浏览

php - 单元测试创​​建对象的方法

我正在尝试进行单元测试,但我还需要找到一块拼图。

我要做的是为以下代码编写测试。在这种情况下,我有一个非常简单的前端控制器(用 PHP 编写)。

我遇到的问题是因为代码创建了新对象。我可以轻松地模拟请求对象,以便我可以严格控制它在我的测试用例中实际执行的操作。我不确定用测试替身实际替换控制器的最佳方法。

IBM 的这篇文章建议使用工厂方法来创建我的控制器,然后用用于测试的特定类覆盖它:

然后进行测试可能是这样的:

(注意这不是文章所说的,但我认为如果这样做对我最有用)

另一种解决方案可能是拥有另一个创建控制器的类。这将是 frontController 的依赖类。这样,我可以在测试期间用测试替身替换工厂/创建类。像这样的东西:

我想依赖注入可以在前端控制器构造函数中处理,或者通过设置器而不是实际“路由”方法的参数来处理。

我想我更喜欢选项2。

这两种方法中的任何一种都是测试这种东西的正确方法吗?

(也许“好方法”在这里会更好!)

对选项 1 与选项 2 的任何想法或建议表示赞赏,或者确实有任何替代方案。请记住 - 关键是关于如何测试一个对象,该对象本身会创建其他对象作为其执行的一部分。

谢谢!

0 投票
2 回答
1495 浏览

php - 使用 PHPUnit 测试静态类

我有一组我正在尝试测试的课程。A 类依赖于 X 类。X 类包含执行随机操作和数据库操作的函数。我已经创建了 Class X 的模拟版本,它准确地返回我想要的,以便在没有依赖关系的情况下测试 Class A。

所以,我的问题是,我现在如何测试 X 类,因为我已经包含了具有相同名称和文件名的模拟版本。我收到“无法重新声明 X 类”错误。

我认为我不能使用存根,因为无法将存根对象传递给我的测试类。被测类(A 类)将请求一个静态类的实例(ClassA::getInstance();)。

这是否与测试套件或测试用例有关,因为我无法取消包含包含 X 类模拟版本的文件。

在此先感谢您的帮助,

麦克风