我有一個方法,我試圖單元測試,這使得使用HttpContext.Current.Server.MapPath以及File.ReadAllLines如下:MVC嘲諷(MOQ) - HttpContext.Current.Server.MapPath
public List<ProductItem> GetAllProductsFromCSV()
{
var productFilePath = HttpContext.Current.Server.MapPath(@"~/CSV/products.csv");
String[] csvData = File.ReadAllLines(productFilePath);
List<ProductItem> result = new List<ProductItem>();
foreach (string csvrow in csvData)
{
var fields = csvrow.Split(',');
ProductItem prod = new ProductItem()
{
ID = Convert.ToInt32(fields[0]),
Description = fields[1],
Item = fields[2][0],
Price = Convert.ToDecimal(fields[3]),
ImagePath = fields[4],
Barcode = fields[5]
};
result.Add(prod);
}
return result;
}
我有一個單元測試設置,其中(按預期)失敗:
[TestMethod()]
public void ProductCSVfileReturnsResult()
{
ProductsCSV productCSV = new ProductsCSV();
List<ProductItem> result = productCSV.GetAllProductsFromCSV();
Assert.IsNotNull(result);
}
因爲我已經做了很多的閱讀起訂量和扶養注射,我只是不似乎能夠實現。我也看到了一些方便的答案,如:How to avoid HttpContext.Server.MapPath for Unit Testing Purposes但是我只是無法按照我的實際例子。
我希望有人能夠看看這個,並告訴我如何去實現這種方法的成功測試。我覺得我有很多背景需要,但無法將它們放在一起。