|
|
1
31
退房 Tutorial to TDD 使用 Rhino Mocks 和 SystemWrapper . SystemWrapper包装了许多System.IO类,包括文件、文件信息、目录、目录信息…你可以看到 the complete list . 在本教程中,我将演示如何使用MBUnit进行测试,但对于Nunit来说,这是完全相同的。 您的测试将如下所示:
|
|
|
2
40
不一定 一 测试文件系统时要做的事情。事实上,根据具体情况,你可能会做一些事情。 你需要问的问题是: 我在测试什么?
基本原则是:
|
|
|
3
10
Q1: 这里有三种选择。 选项1:随时随地。 (无示例:p) 选项2:根据需要创建一个轻微的抽象。 在被测方法中,您可以更改文件I/O(file.readallbytes或其他),使IO在外部完成,而不是传递流。
将成为
这种方法是一种权衡。首先,是的,它更具可测试性。然而,它权衡了可测试性,只是稍微增加了复杂性。这会影响到可维护性和您必须编写的代码量,而且您可以将测试问题提升一个级别。 然而,根据我的经验,这是一种很好的、平衡的方法,因为您可以概括并使重要的逻辑具有可测试性,而无需将自己投入到完全打包的文件系统中。也就是说,你可以将你真正关心的部分概括起来,而把剩下的部分保持原样。 选项3:包装整个文件系统 更进一步,模拟文件系统是一种有效的方法;这取决于您愿意接受的膨胀程度。 我以前走过这个路线;我有一个打包的文件系统实现,但最后我只是删除了它。API中有一些细微的差异,我必须将它注入到任何地方,最终它对于小收益来说都是额外的痛苦,因为许多使用它的类对我来说并不重要。如果我使用IOC容器或者写一些关键的东西,并且测试需要很快,我可能会坚持下去。与所有这些选项一样,您的里程可能会有所不同。 关于你的国际奥委会集装箱问题: 手动注入测试加倍。如果你需要做很多重复的工作,只需在测试中使用设置/工厂方法。使用IOC容器进行测试将是极端的过度杀伤力!也许我不理解你的第二个问题。 |
|
|
4
1
目前,我通过依赖注入使用一个ifileSystem对象。对于生产代码,包装器类实现接口,包装我需要的特定IO函数。在测试时,我可以创建一个空或存根实现,并将其提供给被测试的类。被测试的班级并不明智。 |
|
|
5
1
从2012年开始,你可以用 Microsoft Fakes 例如,不需要更改代码库,因为它已经冻结了。 弗斯特 generate a fake assembly 对于System.dll或任何其他包,然后模拟预期返回,如:
|
|
|
6
0
我用
这个网站有一个很好的示例,演示如何使用注入进行测试。 http://dontcodetired.com/blog/post/Unit-Testing-C-File-Access-Code-with-SystemIOAbstractions 这是从网站复制的代码副本。
|
|
|
user23819755 · 从文件加载的数据未按正确顺序返回 2 年前 |
|
|
Grekys · C数组元素全部变为相同值 2 年前 |
|
|
Deba · 为什么在cin语句中打印空格时,第0个字符没有打印出来? 2 年前 |
|
|
catodd · C-试图将整数和结构数组存储到二进制文件中 2 年前 |
|
|
heapyams · Java可执行文件无法读取资源文件夹[重复] 2 年前 |
|
|
Community wiki · 在文件中插入值 3 年前 |