phpunit - 为多个测试套件重用模拟对象

标签 php unit-testing phpunit

我很好奇其他人是如何处理这个问题的。编写测试并没有那么糟糕,但是 mock 有点糟透了并且降低了我的流程。一个人是否可以拥有一个“fixtures”目录并使用特定的模拟声明来举例说 mock_db.php?

更进一步,将这些模拟抽象到一个函数中是否是一种不好的做法?

即:

 // function to include a db mock
   include_once 'test/fixtures/dbmock.php';

   $mockMYSQL = $dbmock('mysql', 'db1');
   $mockMSSQL = $dbmock('mssql', 'db2');

只是想知道其他有经验的测试人员如何处理这个问题。我正在编写脚本来同步 2 个数据库,因此这个示例可能会变得非常相关。

最佳答案

我会选择继承 - 在公共(public)父测试用例类的 protected get* 方法中创建和返回公共(public)模拟对象。

或者您可以创建更清晰的独立类,您将在测试套件中对其进行实例化,并让它创建您的模拟对象。我更喜欢这种方式,但它有一个缺点——您可能不能或不应该使用 PHPUnit_Framework_TestCase getMock() 方法。我建议您查看此方法并尝试在您的独立类中使用它的逻辑。

包含全局函数不是很 OOP,PHP 允许它相当神奇,但你应该避免它:)

关于phpunit - 为多个测试套件重用模拟对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6054895/

相关文章:

php - 将对象的 protected 成员的数据复制到数组中的最佳方法

visual-studio-2008 - 从单元测试生成经理报告 (Visual Studio)

python - 如何测试返回某些东西并有副作用的函数?

unit-testing - Nestjs 单元测试 - 模拟方法守卫

php - 我想将 xampp 1.7.7 链接到 php CLI

php - 如何获取laravel模型中的所有记录

PHP复选框数组将 "Array"输入MySQL数据库

php - PHP 属性与文档 block 注释有何不同?

phpunit - 拉拉维尔 5 : PHPUnit and no code coverage driver available

php - 如何减少 PHPUnit 和 ZF3 测试中的数据库连接数?