Java – should I use dependency injection for good design and testable code?

I have a class representing images: it's called photography

The constructor is as follows:

Photography::Photography(QString originalPath,QString appDirectory) {
    this.originalPath = originalPath;
    this.appDirectory = appDirectory;
}

This class contains many methods, such as gettitle(), getcaption(), getsize(), ishorizontal(), etc

There is a public method named getthumbnailpath(), as follows:

QString Photography::getThumbnailPath() {

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

    return previewPath;
}

This method calls the GetHash () method internally:

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;
}

What I want to know is that if the GetHash () method belongs to photoclass or should be in my own hashgenerator, I should inject it into the photography class

However, I don't want to inject a lot of parameters into the photography constructor, just to make the class testable

In this case, if I can't control the method of generating hash, I will face the test of getthumbnailpath() method. I can't test getthumbnailpath() method

Solution

"However, I don't want to inject many parameters into the photography constructor, just so that the class can be tested."

Testability is the high quality of any code But more importantly, by associating a hash with a hash generator, you can relieve responsibility and make your code easier to maintain

In addition, this now means that you can test hashes independently without photography It is now a unit testable hash, giving a path that does not involve photography, for example

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>