您好,我正在尝试为此Controller方法运行一些测试,但是我正在努力测试View,这是我的控制器类。
public class StockController : Controller
{
private readonly IStockService _stockService;
public StockController(IStockService stockService)
{
_stockService = stockService;
}
// GET: Stock
public async Task<IActionResult> Index()
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
IEnumerable<StockDto> stocks = null;
try
{
stocks = await _stockService.GetStockAsync();
}
catch (HttpRequestException)
{
stocks = Array.Empty<StockDto>();
}
return View(stocks.ToList());
}
}
这是用于股票控制器的MS测试项目上的测试方法,我已经完成了 Arrange 和 Act 的工作,但是对于 Asserts 'ViewResult'上有一条红线,我不确定为什么。
[TestMethod]
public async Task ReturnIndexMethod()
{
//Arrange
var controller = new StockController(new FakeStockService());
//Act
var result = await controller.Index();
//Assert
Assert.IsNotNull(result);
var AResult = result as ViewResult;
Assert.IsNotNull(AResult);
var stockResult = AResult.Value as IEnumerable<StockDto>;
Assert.IsNotNull(stockResult);
}
这里还有FakeStockService
,它将提供模拟测试数据,以防万一人们需要查看它。
public class FakeStockService : IStockService
{
private readonly IEnumerable<StockDto> _stock = new List<StockDto>
{
new StockDto { Id = 1, Name = "asfdaf", Description = "afsdfsfdsda", Price = 5000 }
};
public Task<IEnumerable<StockDto>> GetStockAsync()
{
return Task.FromResult(_stock);
}
}
任何帮助或建议都将不胜感激,尝试了所有其他功能后,我在这里茫然无措。
答案 0 :(得分:0)
也许测试缺少命名空间以便访问该ViewResult
类型。
using Microsoft.AspNetCore.Mvc;
//...
此外,除非是错字,否则查看结果应该具有Model
属性,而不是像您那里那样的Value
属性。
[TestMethod]
public async Task ReturnIndexMethod()
{
//Arrange
var controller = new StockController(new FakeStockService());
//Act
var result = await controller.Index();
//Assert
Assert.IsNotNull(result);
var view = result as ViewResult;
Assert.IsNotNull(view);
var stockResult = view.Model as IEnumerable<StockDto>;
Assert.IsNotNull(stockResult);
}
测试中的其他所有内容对我来说都很好。
但是,控制器操作似乎正在访问GET请求上的模型状态。所示的当前示例并不需要使用模型状态,因此我建议将其删除
public async Task<IActionResult> Index() {
IEnumerable<StockDto> stocks = null;
try {
stocks = await _stockService.GetStockAsync();
}
catch (HttpRequestException) {
stocks = Array.Empty<StockDto>();
}
return View(stocks.ToList());
}