我使用Visual Studio 2008 Professional自动化测试。我有一个写入文件的函数。我想对文件写入函数进行单元测试。我在某个地方读到过,我必须以某种方式模拟文件。我不知道如何做。你能帮忙吗?
如何对从互联网下载页面的方法进行单元测试?
我使用Visual Studio 2008 Professional自动化测试。我有一个写入文件的函数。我想对文件写入函数进行单元测试。我在某个地方读到过,我必须以某种方式模拟文件。我不知道如何做。你能帮忙吗?
如何对从互联网下载页面的方法进行单元测试?
Stream
并将 MemoryStream
传递给代码(并检查内容)。你也可以直接写入文件系统(在临时区域),检查内容后删除。如果你的代码高于文件系统,你可以编写一个可模拟的 IFileSystem
接口,其中包含你需要的高级方法(如 WriteAllBytes
/ WriteAllText
)。但是模拟流API可能会很麻烦。IWebClient
接口,其中包含你需要的函数(如 DownloadString
等);模拟它以返回固定内容,并使用像 WebClient
这样的东西作为实际实现的基础。当然,你需要针对真实站点测试实际实现。如果您的测试目标是测试文件是否已经创建,那么它是一个集成测试,而不是单元测试。
如果您的目标是测试是否将正确的事物写入文件中,请将文件访问隐藏在接口后面,并提供内存实现。
对于网页访问也是如此。
interface IFileService
{
Stream CreateFile(string filename);
}
class InMemoryFileService : IFileService
{
private Dictionary<string, MemoryStream> files = new Dictionary<string, MemoryStream>();
public Stream CreateFile(string filename)
{
MemoryStream stream = new MemoryStream();
files.Add(filename, stream);
return stream;
}
public MemoryStream GetFile(string filename)
{
return files[filename];
}
}
你实际上不想在函数中直接调用写文件的操作,而是要将文件I/O封装在一个带有接口的类中。
然后,你可以使用类似Rhino Mocks的工具来创建实现该接口的模拟类。