首先,我知道这个问题非常接近:如何在 C# 单元测试中映射路径 https://stackoverflow.com/questions/1231860/how-to-mappath-in-a-unit-test-in-c
但我希望它有不同的解决方案。我的问题如下:
在我的代码中,我有一个需要验证的对象。我正在为每种验证方法创建单元测试,以确保其正确验证。我正在创建模拟数据并将其加载到对象中,然后验证它。问题是在验证过程中,当发生错误时,会分配一个错误代码。此错误代码用于使用 Server.MapPath 从 xml 文件收集有关错误的信息。但是,当尝试获取 xml 文件时,会抛出异常,意味着找不到该文件。
由于 MapPath 位于我的验证代码中,而不是我的单元测试中,因此如何让我的单元测试识别该路径?这个问题有意义吗?
错误行(在我的验证代码中,而不是我的单元测试中):
XDocument xdoc = XDocument.Load(HttpContext.Current.Server.MapPath("App_Data/ErrorCodes.xml"));
简化:单元测试调用我的程序中的一个方法,该方法调用 Server.MapPath,然后失败。
我会将“文件名提供程序”抽象为一个仅返回位置的类,然后您可以更轻松地模拟它。
public class PathProvider
{
public virtual string GetPath()
{
return HttpContext.Current.Server.MapPath("App_Data/ErrorCodes.xml");
}
}
然后,您可以直接使用 PathProvider 类...
PathProvider pathProvider = new PathProvider();
XDocument xdoc = XDocument.Load(pathProvider.GetPath());
或者在你的测试中模拟它:
PathProvider pathProvider = new MockPathProvider(); // using a mocking framework
XDocument xdoc = XDocument.Load(pathProvider.GetPath());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)