首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为了有一个好的设计和可测试的代码,我应该使用依赖注入吗?

为了有一个好的设计和可测试的代码,我应该使用依赖注入吗?
EN

Stack Overflow用户
提问于 2015-08-28 08:41:59
回答 2查看 81关注 0票数 4

我有一个表示图像的类:它叫做Photography

构造函数如下所示:

代码语言:javascript
复制
Photography::Photography(QString originalPath, QString appDirectory) {
    this.originalPath = originalPath;
    this.appDirectory = appDirectory;
}

该类包含许多方法,如getTitle()getCaption()getSize()isHorizontal()等。

有一个名为getThumbnailPath()public方法,如下所示:

代码语言:javascript
复制
QString Photography::getThumbnailPath() {

    if (previewPath == "") {
        previewPath = appDirectory + "//cache//"+  getHash() +"-thumb.jpg";
    }

    return previewPath;
}

此方法在内部调用getHash()方法:

代码语言:javascript
复制
QString Photography::getHash() {

    if (myHash == "") {

        QCryptographicHash hash(QCryptographicHash::Md5);
        QByteArray result = hash.hash(originalPath.toUtf8(), QCryptographicHash::Md5);
        QString hashResult(result.toHex());

        myHash  =  hashResult;
    }

    return myHash;
}

我想知道的是getHash()方法是属于Photography类,还是应该在它自己的HashGenerator中,我应该将它注入到Photography类中。

但是,我不想仅仅为了使类可测试而在Photography构造函数中注入大量参数。

在这种情况下,我面临着getThumbnailPath()方法的测试,如果我不能控制生成散列的方法,我就不能测试getThumbnailPath()方法。

EN

回答 2

Stack Overflow用户

发布于 2015-08-28 08:54:35

“但是,我不想仅仅为了让类可测试而在Photography构造函数中注入很多参数。”

成为可测试的对任何一段代码来说都是一个很好的质量。但更重要的是,您可以通过将散列与散列生成器相关联来解耦职责,并使代码更易于维护。

这也意味着你现在可以独立测试散列,而不需要Photography类。它现在的单元可测试哈希给出了一条路径,例如,不涉及摄影

票数 0
EN

Stack Overflow用户

发布于 2015-08-28 09:01:35

我认为把散列代码从Photography类中去掉是个好主意,你可以单独测试它,但我不会急于将这种依赖注入到Photography中,除非你需要多个散列算法的实现。

我认为让Photography类依赖于散列代码是可以的,这可以是像自由函数一样简单的东西。散列算法已经通过getThumbnailPath成员函数有效地公开了,所以我看不出在getThumbnailPath测试中生成预期的散列有什么特别的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32261615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档