c#中的模拟文件IO静态类我正在使用Rhinomock,实现此目的的最佳方法是什么,假设我需要模拟File.Exists、File.Delete...您不能使用Rhino模拟来模拟静态方法。有关详细信息,请参阅此问题。您可以创建一个外观类来包装您将使用的文件系统调用,然后创建它的模拟版本。另请参阅Vadim的SystemWrapper。你可以用它模拟许多系统类,但你需要应用依赖注入模式来使你的代码可测试。[测试]publicvoidCheck_that_FileInfo_methods_Create_and_Delete_are_called(){//添加模拟存储库。IFileInfoWrapfileInfoRepository=MockRepository.GenerateMock();IFileStreamWrapfileStreamRepository=MockRepository.GenerateMock();//创建expectationsRepository=x.Return(fileStreamRepository);fileStreamRepository.Expect(x=>x.Close());fileInfoRepository.Expect(x=>x.Delete());//测试新的FileInfoSample().CreateAndDeleteFile(fileInfoRepository);//验证expectations.fileInfoRepository.VerifyAllExpectations();fileStreamRepository.VerifyAllExpectations();您应该创建一个名为IFileService的包装器服务,然后您可以使用静态函数创建一个要在您的应用程序中使用的具体项,并使用一个false函数来测试模拟IFileService。为此,您必须将IFileService传递给构造函数或属性,因为正常操作需要您传递IFileService。请记住,在单元测试中,您只测试那部分代码,而不是IFileService之类的东西。接口IFileService{布尔存在(字符串文件名);无效删除(字符串文件名);}classFileService:IFileService{publicboolExists(stringfileName){returnFile.Exists(fileName);}publicvoidDelete(stringfileName){文件。删除(文件名);}}classMyRealCode{privateIFileService_fileService;publicMyRealCode(IFileServicefileService){_fileService=fileService;}voidDoStuff(){_fileService.Exists("myfile.txt");}}我还使用了包装器类。我使用此工具轻松生成包装类,如System.IO.Filehttps://www.nuget.org/packages/Digitrish.WrapperGenerator/安装包后,只需在包管理器控制台ScaffoldWrapperSystem.IO上键入以下内容.File这将生成IFile.cs接口和一个concreate包装器类File.cs。然后你可以使用IFile来模拟和File.cs进行真正的实现。为什么不使用MSFakes?与RhinoMocks、SystemWrapper.Wrapper和SystemWrapper.Interface相比,这不是很简单吗?除了你不能模拟静态简单的答案。我想指出您不应该模拟File.IO类型,因为它不是您拥有的类型。您应该只拥有自己的模拟类型。您可以使用最小起订量框架。这是一个开源的谷歌项目,你可以从这里下载。下载Moq框架要完全了解如何在C#中使用moq,请参阅以下文章。http://learningcsharpe.blogspot.com/2011/11/how-to-use-moq-library-for-your-unit.html谢谢,Erandika。以上就是C#学习教程:c#中模拟文件IO静态类分享的全部内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
