我对单元测试完全陌生,我正在努力学习自己。我在第一道障碍中失败了,尽管有无数的书籍和网站我看不出我做错了什么......请有人能告诉我吗?我有一个Action ViewResult如下我正在测试:
public ViewResult ProductList()
{
List<ProductItem> allProducts = CallGetAllProducts();
return View(allProducts);
}
你可以看到它正在调用一个函数:
private List<ProductItem> CallGetAllProducts()
{
var productFilePath = Server.MapPath(@"~/CSV/products.csv");
var products = new ProductsCSV();
return (products.GetAllProductsFromCSV(productFilePath));
}
接下来调用以下函数:
public List<ProductItem> GetAllProductsFromCSV(string csvPath)
{
String[] csvData = File.ReadAllLines(csvPath);
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;
}
我在相应的ControllerTest文件中使用以下测试方法创建了一个单元测试项目:
[TestMethod()]
public void ProductListGetsViewResult()
{
ProductsController controller = new ProductsController();
ViewResult result = controller.ProductList() as ViewResult;
Assert.IsNotNull(result);
}
据我所知,我已经设置了所有正确的引用,但是运行此测试的结果又回来了:
结果讯息:
测试方法ShoppingBasket.Controllers.Tests.ProductsControllerTests.ProductListGetsViewResult抛出异常:
System.NullReferenceException:未将对象引用设置为对象的实例。
看起来问题是在过程的“行动”部分调用ViewResult ......但为什么,我不知道。