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


phpunit - reusing mock objects for multiple test suites

我很好奇其他人是如何处理这个问题的。编写测试还不错,但嘲笑有点糟糕,会切断我的流程。一个人可以拥有一个"固定装置"目录并说mock_db.php例如,只有那个特定的模拟声明吗?

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

即:

 // function to include a db mock
   include_once 'test/fixtures/dbmock.php';
   $mockMYSQL = $dbmock('mysql', 'db1');
   $mockMSSQL = $dbmock('mssql', 'db2');

JUst 有兴趣了解其他经验丰富的测试人员如何处理这个问题。我正在编写脚本来同步 2 个数据库,因此此示例可能变得非常相关。

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

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

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