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

发布于 2024-11-08 12:20:45 字数 403 浏览 0 评论 0原文

我很好奇其他人如何处理这个问题。编写测试并没有那么糟糕,但是嘲笑有点糟糕并且会削减我的流程。是否可以拥有一个“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 个数据库,因此这个示例可能会变得非常相关。

I am curious as to how others approach this. Writing a test ain't so bad, but mocking kind of sucks a bit and cuts my flow. Is it ok for one to have a 'fixtures' directory and have say mock_db.php for example with just that particular mock declaration?

Going one step further, would it be bad practice to have those mocks abstracted in a function?

Ie:

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

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

JUst interested to know how other experienced testers handle this. I'm writing scripts to sync 2 databases so this example may become very relevant.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

白首有我共你 2024-11-15 12:20:45

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

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

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

I would go either with inheritance - having the common mock objects created and returned in protected get* methods in common parent test case class.

Or you can create cleaner and standalone class that you would instantiate in your test suites and let it create your mock objects. I would prefer this way, but it has one downside - you probably can not or should not use the PHPUnit_Framework_TestCase getMock() method. I recommend you to look at this method and try to use its logic in your standalone class.

Including global functions is not very OOP, it's rather magic that PHP allows but you should avoid it :)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文