C#学习教程:如何在C#单元测试中做MapPath如何获取文件的路径?通常在网络应用程序中我会这样做:XDocument.Load(Server.MapPath("/myFile.xml"));但显然在我的单元测试中我没有引用服务器或HttpContext,所以我如何映射路径以便我不必指定完整路径?更新:我只想声明我实际测试的代码是针对XML解析器类的,例如:publicstaticclassCustomerXmlParser{publicstaticCustomerParseXml(XDocumentxdoc){//...}}所以为了对此进行测试,我需要解析一个有效的XDocument。被测试的方法不访问文件系统本身。我可以直接在测试代码中从字符串创建XDocument,但我认为从文件加载它会更容易。另一个想法是利用依赖注入。publicinterfaceIPathMapper{stringMapPath(stringrelativePath);}然后简单地使用2个实现publicclassServerPathMapper:IPathMapper{publicstringMapPath(stringrelativePath){returnHttpContext.Current.Server.MapPath(relativePath);然后你也你的模拟需要实现publicclassDummyPathMapper:IPathMapper{publicstringMapPath(stringrelativePath){return"C:/Basedir/"+relativePath;然后,所有需要映射路径的函数只需要访问IPathMapper的实例——在你的Inweb应用程序中它需要是ServerPathMapper,并在你的单元中测试DummyPathMapper——基本DI(依赖注入)。就个人而言,我会非常警惕任何依赖于后端资源存储的代码,无论是文件系统还是数据库——你在单元测试中引入了一个依赖项,它可能导致漏报,即测试失败因为你,但因为文件不存在或服务器不可用等。有关单元测试、IMO的详细定义,请参阅此链接,更重要的是,你的单元测试不应该测试原始的、定义良好的功能,而不是文件是否可以加载。一种解决方案是“模拟”文件加载-但有多种方法,但我个人只是模拟您正在使用的文件系统的界面,而不是尝试进行任何完整的文件系统模拟-这是一个很好的SOpost和这是一个很好的所以关于文件系统模拟的讨论希望能有所帮助通常对于单元测试,我将xml文件作为嵌入式资源添加到项目中,并使用如下方式加载它们:publicstaticstringLoadResource(stringname){TypethisType=MethodBase.GetCurrentMethod().DeclaringType;stringfullName=thisType.Namespace+"."+名称+".xml";使用(Streamstream=thisType.Module.Assembly.GetManifestResourceStream(fullName)){if(stream==null){thrownewArgumentException("Resource"+name+"notfound.");}StreamReadersr=newStreamReader(stream);返回sr.ReadToEnd();编辑:我从头开始,因为我认为我最初以错误的方式解释你的问题。在单元测试中加载XML文件以便将其注入某个类的最佳方法是在MSunit测试中使用DeploymentItem属性。这看起来像这样:[TestMethod][DeploymentItem(@"DataXmlFilesMyTestFile.xml","DataFiles")]publicvoidLoadXMLFileTest(){//使用您的返回类型(即字符串、XDocument或其他)代替“对象”//LoadXmlFile可能是单元测试中的一种方法,它实际上从文件系统对象加载XML文件myLoadedFile=LoadXmlFile(Path.Combine(TestContext.TestDeploymentDir,"DataFiles\MyTestFile.xml"));//做一些单元测试断言来验证结果}我现在还没有在调试器上测试代码,但它应该可以工作。编辑:顺便说一下,当您使用DeploymentItem时,请在此处考虑这篇文章。类:内部类FakeHttpContext:HttpContextBase{publicoverrideHttpRequestBaseRequest{get{returnnewFakeHttpRequest();}}}internalclassFakeHttpRequest:HttpRequestBase{publicoverridestringMapPath(stringvirtualPath/*){usage:youreturnmur以上就是C#学习教程:HowtouseMapPathinunittestinginC#inC#的全部内容。如果对大家有用,需要详细了解C#学习教程,希望大家多多关注——[TestMethod]publicvoidTestMethod(){varcontext=newFakeHttpContext();stringpathToFile=context.Request.MapPath("~/static/all.js");}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
