我对其他人如何处理这一点感到好奇。编写测试还不错,但是 mock 有点糟,并且减少了我的工作量。是否可以拥有一个“灯具”目录并例如仅带有该特定的模拟声明就说出了mock_db.php,这是可以的吗?
更进一步,将那些模拟抽象到函数中是否会是不好的做法?
IE:
// function to include a db mock
include_once 'test/fixtures/dbmock.php';
$mockMYSQL = $dbmock('mysql', 'db1');
$mockMSSQL = $dbmock('mssql', 'db2');
JUst有兴趣了解其他经验丰富的测试人员如何处理此问题。我正在编写脚本来同步2个数据库,因此该示例可能变得非常相关。
最佳答案
我要么选择继承,要么在公共(public)父测试用例类中的受保护的get *方法中创建并返回公共(public)的模拟对象。
或者,您可以创建将在测试套件中实例化的更整洁的独立类,并让其创建模拟对象。我更喜欢这种方式,但是它有一个缺点-您可能不能或不应该使用PHPUnit_Framework_TestCase getMock()方法。我建议您查看此方法,并尝试在独立类中使用其逻辑。
包括全局函数不是非常好的OOP,PHP允许这样做是很神奇的,但是您应该避免使用它:)
关于phpunit-为多个测试套件重用模拟对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6054895/