我有一个从硬盘中检索文档的方法。我无法在单元测试中测试它。它总是抛出异常,提示无效的空路径或其他什么异常。如何测试它?我临时为单元测试创建了会话,但我不能为这个 Server.MapPath 创建会话。该怎么办?
我有一个从硬盘中检索文档的方法。我无法在单元测试中测试它。它总是抛出异常,提示无效的空路径或其他什么异常。如何测试它?我临时为单元测试创建了会话,但我不能为这个 Server.MapPath 创建会话。该怎么办?
您可以使用依赖注入和抽象来覆盖 Server.MapPath。
public interface IPathProvider
{
string MapPath(string path);
}
实际生产中的实现将是:
public class ServerPathProvider : IPathProvider
{
public string MapPath(string path)
{
return HttpContext.Current.Server.MapPath(path);
}
}
测试一时:
public class TestPathProvider : IPathProvider
{
public string MapPath(string path)
{
return Path.Combine(@"C:\project\",path);
}
}
以下是其工作原理:
var expectedPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "path");
using (new FakeHttpContext())
{
var mappedPath = Http.Context.Current.Server.MapPath("path");
Assert.Equal(expectedPath, mappedPath);
}
我正在使用NSubstitute,并按照以下方式实现:
var fakeContext = Substitute.For<HttpContextBase>();
fakeContext.Server.MapPath(Arg.Any<string>()).ReturnsForAnyArgs("/set-path/");