我有一个表示图像的类:它叫做Photography。
构造函数如下所示:
Photography::Photography(QString originalPath, QString appDirectory) {
this.originalPath = originalPath;
this.appDirectory = appDirectory;
}该类包含许多方法,如getTitle()、getCaption()、getSize()、isHorizontal()等。
有一个名为getThumbnailPath()的public方法,如下所示:
QString Photography::getThumbnailPath() {
if (previewPath == "") {
previewPath = appDirectory + "//cache//"+ getHash() +"-thumb.jpg";
}
return previewPath;
}此方法在内部调用getHash()方法:
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()方法。
发布于 2015-08-28 08:54:35
“但是,我不想仅仅为了让类可测试而在Photography构造函数中注入很多参数。”
成为可测试的对任何一段代码来说都是一个很好的质量。但更重要的是,您可以通过将散列与散列生成器相关联来解耦职责,并使代码更易于维护。
这也意味着你现在可以独立测试散列,而不需要Photography类。它现在的单元可测试哈希给出了一条路径,例如,不涉及摄影
发布于 2015-08-28 09:01:35
我认为把散列代码从Photography类中去掉是个好主意,你可以单独测试它,但我不会急于将这种依赖注入到Photography中,除非你需要多个散列算法的实现。
我认为让Photography类依赖于散列代码是可以的,这可以是像自由函数一样简单的东西。散列算法已经通过getThumbnailPath成员函数有效地公开了,所以我看不出在getThumbnailPath测试中生成预期的散列有什么特别的问题。
https://stackoverflow.com/questions/32261615
复制相似问题