gpt4 book ai didi

c# - 如何对需要从硬盘加载数据的算法进行单元测试(在本例中为图片!)?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:28:17 26 4
gpt4 key购买 nike

介绍

我正在做一种 OCR 应用程序,它应该根据每个字符的预保存 .bmp 图片识别字符。

现在,对于屏幕截图的给定部分,我知道那里会有一个角色,我想将当前图片传递给 CharacterFactory,它将返回一个 Character 对象:

class CharacterFactory : ICharacterFactory {
private Collection<Bitmap> aPictures = new HashTable<Bitmap>();
private Collection<Bitmap> bPictures = new HashTable<Bitmap>();
private Collection<Bitmap> cPictures = new HashTable<Bitmap>();
...

public CharacterFactory() {
LoadAllPictures();
}

...

public Character GetCharacter(Bitmap characterToRecognize) {
if (aPictures.Contains(characterToRecognize)) return new ACharacter();
if (bPictures.Contains(characterToRecognize)) return new BCharacter();
if (cPictures.Contains(characterToRecognize)) return new BCharacter();
...
}
}

我的问题是

如何对这个类进行单元测试?我能看到的测试该类的唯一方法确实是保存几个位图以传入 characterToRecognize 参数并将它们与我的程序具有的预保存图片列表进行比较。当然,这有一个问题,即需要一些时间来加载图片,并需要一些其他时间来运行 GetCharacter() 算法。

我当然可以将我的每个 CharacterFactory 的 xPictures 集合包装在一个新类中,但我只是将问题推给了那个新类。

遇到这种情况怎么办?

最佳答案

当然,问题在于 BitMap(与许多 .Net 类一样)是密封的。这使您很难创建模拟。在这些情况下,我通常做的是为这些类制作一个非常薄的包装器,它采用 BitMap 作为构造函数,然后模拟方法并委托(delegate)给 BitMap。那么你可以模拟这个类,或者为它提取一个接口(interface)。然后让你想要测试的类采用你的新“IBitMap”并模拟它,就像其他人所说的那样注入(inject)你的数据。

我的项目通常以一小部分这些“Microsoft Wrappers”结束。如果他们只包含这些类的接口(interface),或者至少不密封它们,那就容易多了。

关于c# - 如何对需要从硬盘加载数据的算法进行单元测试(在本例中为图片!)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3536495/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com