C# dotnet核心web应用程序单元测试控制器

C# dotnet核心web应用程序单元测试控制器,c#,unit-testing,asp.net-core,.net-core,C#,Unit Testing,Asp.net Core,.net Core,我有一个dotnetcore web应用程序,希望对控制器进行单元测试。我该怎么办 我有一个简单的控制器,看起来像这样 public class ConversionController : Controller { private readonly INumberService _numberService; public ConversionController(INumberService numberService) { this._number

我有一个dotnetcore web应用程序,希望对控制器进行单元测试。我该怎么办

我有一个简单的控制器,看起来像这样

public class ConversionController : Controller {
    private readonly INumberService _numberService;

    public ConversionController(INumberService numberService)
    {
        this._numberService = numberService;
    }

    // GET http://localhost:9789/api/conversion/123
    [HttpGet("{number}")]
    public string Get(decimal number)
    {
        return _numberService.ConvertToWords(number);
    }
}

INumberService
作为参数传入。如何对其进行单元测试?

模拟接口/依赖项,并对Get方法进行独立的单元测试。您可以创建自己的mock,也可以使用mock框架来模拟依赖项。从这里可以断言被测系统的行为符合预期

例如,下面的简单测试用于模拟依赖关系并测试
Get
方法

[TestMethod]
public void ConversionController_Get_Should_Return_Five() {
    //Arrange
    var number = 5;
    var expected = "five";
    var mock = new Mock<INumberService>();
    mock.Setup(_ => _.ConvertToWords(number)).Returns(expected);
    var sut = new ConversionController(mock.Object);

    //Act
    var actual = sut.Get(number);

    //Assert
    Assert.AreEqual(expected, actual);
}
[TestMethod]
public void ConversionController\u Get\u Should\u Return\u Five(){
//安排
var数=5;
var预期值为“五”;
var mock=new mock();
mock.Setup(=>u.ConvertToWords(number)).Returns(预期);
var sut=新的ConversionController(mock.Object);
//表演
var实际值=sut.Get(数字);
//断言
断言.AreEqual(预期、实际);
}
您还应该花一些时间检查提供的文档