2011-05-19 77 views
6

我很好奇其他人如何解决这个问题。编写测试并不是那么糟糕,但嘲讽有点吮吸并削减我的流量。如果有一个'fixtures'目录,并且只有mock_db.php才可以使用该特定的模拟声明,那么可以吗?phpunit - 为多个测试套件重复使用模拟对象

更进一步,将这些嘲笑抽象为一个函数是不好的做法吗?

即:

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

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

只是想知道有经验的测试等如何处理这个问题。我正在编写脚本来同步2个数据库,所以这个例子可能变得非常相关。

+0

不要数据提供帮助吗? – zerkms 2011-05-19 06:56:22

+0

您是否在谈论使用'$ this-> getMock('')创建的PHPUnit模拟对象还是这些自定义模拟对象?使用灯具来创建测试支持对象是完全有效的并且是推荐的。 – 2011-05-19 19:49:22

+0

@David我希望有mock可重用的不同测试套件。在这个嘲弄的业务中仍然很绿,并且对如何实现这一点毫无头绪。 – stefgosselin 2011-05-21 04:34:54

回答

3

我会继承与继承 - 共同的模拟对象创建并返回到普通的父测试用例类中受保护的get *方法。

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

包括全球功能不是很OOP,这是相当神奇的是PHP允许,但你应该避免它:)

+0

嗨,感谢提示,在小班的测试用例中进行分类是我失踪的那篇文章。根据你的建议,我已经创建了几个独立的,但我仍然需要研究一种重用getMock()创建器的方法。 – stefgosselin 2011-05-22 11:48:01