簡體   English   中英

Server.MapPath的單元測試

[英]Unit testing for 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);
    }
}

如果您需要測試無法更改或不想更改的舊代碼,則可以嘗試FakeHttpContext

它是這樣工作的:

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/");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM