如何使用Visual Studio的内置自动化测试对文件编写方法进行单元测试?

Jad*_*ias 5 automated-tests unit-testing mocking visual-studio-2008 visual-studio

  1. 我使用Visual Studio 2008 Professional自动化测试.我有一个写入文件的函数.我想单元测试文件写入功能.我已经读过某个地方,我不得不以某种方式模拟文件.我不知道怎么做.你能帮我吗?

  2. 如何对从Internet下载页面的方法进行单元测试?

Jon*_*eet 7

如果该方法必须打开文件流本身,那么很难模拟.但是,如果您可以将流传递给方法,并使其写入该方法,则可以传入MemoryStream.替代重载可以占用更少的参数,打开文件并将FileStream传递给另一个方法.

这样你就得不到完整的覆盖范围(除非你写了一两个确实碰到磁盘的测试)但是你的大多数逻辑都在经过完全测试的代码中,在采用Stream参数的方法中.


Mar*_*ell 6

这取决于你的代码与nut'n'bolts的接近程度; 例如,您可以在Streams中工作,并将a传递MemoryStream给代码(并检查内容).您可以只写入文件系统(在临时区域中),检查内容并在之后丢弃它.如果你的代码比文件系统高一点,你可以用IFileSystem你需要的高级方法(比如WriteAllBytes/ WriteAllText)编写一个可模拟的接口.不过,模拟流式API会很痛苦.

从互联网下载(或假装)...你可以(例如)IWebClient用你需要的功能(如DownloadString,等)编写一个界面; 嘲笑它返回固定内容,并使用类似的东西WebClient作为实际实现的基础.当然,您需要针对真实站点测试实际实现.

  • 并且针对真实站点测试实际实现将是"集成测试",大多数单元测试框架允许您从标准测试中组织出来.您运行这些集成测试的次数少于标准单元测试,因为它们会很慢(因为实际测试的是"物理"事物,而不是伪造的东西. (2认同)