asp.net如何将假路径获取要读取被分配到受保护的对象内部方法的单元测试?

标签: Asp.net C#
发布时间: 2016/9/19 0:40:54
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

新的单元测试,MSTest !我得到 NullReferenceException

如何设置 HttpContext.Current.Server.MapPath 做单元测试?

class Account
{
    protected string accfilepath;

    public Account(){
        accfilepath=HttpContext.Current.Server.MapPath("~/files/");
    }
}

class Test
{
    [TestMethod]
    public void TestMethod()
    {
        Account ac= new Account();
    }
}

解决方法 1:

HttpContext.Server.MapPath将需要基础的虚拟目录提供程序在单元测试过程中不会存在。抽象的后面你可以嘲笑要使代码可测试的服务路径映射。

public interface IPathProvider {
    string MapPath(string path);
}

在具体的服务的生产执行您可以您的电话将路径映射和检索文件。

public class ServerPathProvider: IPathProvider {
    public MapPath(string path) {
        return HttpContext.Current.Server.MapPath(path);
    }
}

你将为你依赖类注入抽象或需要和使用

class Account {
    protected string accfilepath;

    public Account(IPathProvider pathProvider) {
        accfilepath = pathProvider.MapPath("~/files/");
    }
}

如果一个嘲弄的框架不是可用的,使用选择或假/测试类的嘲弄框架

public class FakePathProvider : IPathProvider {
    public string MapPath(string path) {
        return Path.Combine(@"C:\testproject\",path.Replace("~/",""));
    }
}

然后,您可以测试系统

[TestClass]
class Test {

    [TestMethod]
    public void TestMethod() {
        // Arrange
        IPathProvider fakePathProvider = new FakePathProvider();

        Account ac = new Account(fakePathProvider);

        // Act
        // ...other test code
    }
}

和不耦合到HttpContext

官方微信
官方QQ群
31647020