【发布时间】:2021-12-16 13:22:22
【问题描述】:
我是单元测试的新手,也很困惑,希望你能帮助我理解一些事情, 我想为以下场景编写一个 Xunit 测试:
我有以下控制器:
[ApiController]
[Route("api/[controller]")]
public class HomeController : ControllerBase
{
public readonly IDataService _dataService;
public HomeController(IDataService dataservice)
{
_dataService = dataservice;
}
[HttpGet("/value")]
public IActionResult GetTotal(string name, string year)
{
var totalAmount = _dataService.GetToTalValue(name, year);
return Ok(totalAmount.Result);
}
我有存储库类来与数据库对话,我将其命名为 dataservice:
public interface IDataService
{
public Task<decimal> GetTotal(string name, string year)
}
实现很简单,我只写我返回的内容以制作长篇故事:
public Task<decimal> GetTotal(string name, string year){
///here i connect to db and get data and return to controller
return Task.FromResult(totalAmount);
}
最后,我按照一些在线教程创建了一个单元测试:
public class UnitTest1
{
[Fact]
public void Test1()
{
var sut = new Mock<IDataService>();
sut.Setup(s => s.GetTotal("ASK", "1235")).ReturnsAsync(1231);
HomeController mm = new HomeController(sut.Object);
var result = mm.GetTotal("ASK", "1235");
///asset gives error because cant convert iactionresult to decimal
}
}
}
首先我不明白为什么我们需要写:
sut.Setup(s => s.GetTotal("ASK", "1235")).ReturnsAsync(1231);
因为我们将再次使用控制器进行确切的操作:
HomeController mm = new HomeController(sut.Object);
var result = mm.GetTotal("ASK", "1235");
该设置意味着我将两个值传递给 GetTotal 并期望 1231 对吗?那么测试控制器的意义何在?请帮助我理解它,我的第二个问题是我从 iactionresult 得到的结果是十进制的,但在断言中我得到错误,我无法将 iactionresult 转换为十进制
我们将不胜感激任何帮助
【问题讨论】:
标签: c# unit-testing asp.net-core