在不可模拟的遗留代码中提供依赖项

发布于 2024-11-09 07:32:22 字数 448 浏览 0 评论 0原文

我有一个遗留类,我想快速为其编写一些测试。不幸的是,我们在构造函数中有一个单例调用,目前没有足够的时间来重构它。

function __construct(){

   $this->_dbConnect = DbConnect::getInstance();
  // very long constructer (sigh) omitted below ...
}

这样做是否可以接受,以便拥有可模拟的遗留代码:

function __construct(DbConnect $dbConnect = null){

    $this->_dbConnect = isset($dbConnect) ? $dbConnect : DbConnect::getInstance(); 

   // <snip>
}

I have a legacy class that I quickly want to write a couple of tests for. Unfortunately we have a singleton call in the constructer, and not enough time at present to refactor it as it should.

function __construct(){

   $this->_dbConnect = DbConnect::getInstance();
  // very long constructer (sigh) omitted below ...
}

Is it acceptable practice to do this, so as to have mockable legacy code :

function __construct(DbConnect $dbConnect = null){

    $this->_dbConnect = isset($dbConnect) ? $dbConnect : DbConnect::getInstance(); 

   // <snip>
}

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

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

发布评论

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

评论(2

极致的悲 2024-11-16 07:32:22

这样做是否可以接受,以便拥有可模拟的遗留代码:

我想这是一个好的开始。话又说回来,如果您要重构整个应用程序,您可能需要考虑仅通过构造函数请求 DatabaseConnection,并更改将创建该对象的所有调用。如果您现在只专注于测试该类,那么您的解决方案是完全可以接受的。

Is it acceptable practice to do this, so as to have mockable legacy code :

It's a good start, I guess. Then again, if you're going to refactor the whole application, you might want to consider just requesting the DatabaseConnection via the constructor, and change all calls that would create that object. If you're only focused on testing that exact class right now, your solution is totally acceptable.

在风中等你 2024-11-16 07:32:22

如果您只想测试此类 - ,那么它就是普通代码。

很抱歉只回答了一行,但您的问题已经包含答案了:)

If you want to test only this class - yes, it's normal code.

Sorry for 1-line answer, but your question contains answer already :)

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