如果该方法必须打开文件流本身,那么很难模拟.但是,如果您可以将流传递给方法,并使其写入该方法,则可以传入MemoryStream.替代重载可以占用更少的参数,打开文件并将FileStream传递给另一个方法.
这样你就得不到完整的覆盖范围(除非你写了一两个确实碰到磁盘的测试)但是你的大多数逻辑都在经过完全测试的代码中,在采用Stream参数的方法中.
如果该方法必须打开文件流本身,那么很难模拟.但是,如果您可以将流传递给方法,并使其写入该方法,则可以传入MemoryStream.替代重载可以占用更少的参数,打开文件并将FileStream传递给另一个方法.
这样你就得不到完整的覆盖范围(除非你写了一两个确实碰到磁盘的测试)但是你的大多数逻辑都在经过完全测试的代码中,在采用Stream参数的方法中.
这取决于你的代码与nut'n'bolts的接近程度; 例如,您可以在Stream
s中工作,并将a传递MemoryStream
给代码(并检查内容).您可以只写入文件系统(在临时区域中),检查内容并在之后丢弃它.如果你的代码比文件系统高一点,你可以用IFileSystem
你需要的高级方法(比如WriteAllBytes
/ WriteAllText
)编写一个可模拟的接口.不过,模拟流式API会很痛苦.
从互联网下载(或假装)...你可以(例如)IWebClient
用你需要的功能(如DownloadString
,等)编写一个界面; 嘲笑它返回固定内容,并使用类似的东西WebClient
作为实际实现的基础.当然,您需要针对真实站点测试实际实现.