C# Api控制器的单元测试

C# Api控制器的单元测试,c#,unit-testing,asp.net-web-api,moq,C#,Unit Testing,Asp.net Web Api,Moq,我尝试为Api控制器编写一个单元测试。这是一个C#mvc应用程序。单元测试也适用于最小起订量 这是控制器: public sealed class CaseController : ApiControllerBase { [HttpGet] [Route("{id:int}")] public ICaseDto<object> Get(int id) { return _caseProcess.GetCase(id);

我尝试为Api控制器编写一个单元测试。这是一个C#mvc应用程序。单元测试也适用于最小起订量

这是控制器:

public sealed class CaseController : ApiControllerBase
{    
    [HttpGet]
    [Route("{id:int}")]
    public ICaseDto<object> Get(int id)
    {
        return _caseProcess.GetCase(id);
    }
}
我现在是这样的:

[TestMethod]
public void CaseConroller_ReturnDetailData_Test()
{
    //Arrange
    var dto = new Case();
    var mockService = new Mock<ICaseProcess>();
    var Casecontroller = new CaseController(ICaseDto<Case>);
    var expected = new CaseEditDto();
    //var dataSource = new

    CaseProcess.Setup(a => a.Should(dto))

    //Act

    // var result = "hallo";

    //Assert
    result.Should().BeEquivalentTo();
}
 public CaseController(ICaseProcess caseProcess)
        {
            _caseProcess = caseProcess;
        }
 //Arrange
            var dto = new Case();
            var mockService = new Mock<ICaseProcess>();
            var casecontroller = new CaseController(CaseProcess.Object);
            var expected = new CaseEditDto();

            //Act

             var result = casecontroller.Get(100000001);

            //Assert
            result.Should().BeEquivalentTo(expected);
{
    "details": {
        "name": "Val van Urquhart",
        "dateOfBirth": "11 september 1933"
    },
    "dateSubmittedFormatted": "1 januari 2018",
    "dateClosedFormatted": null,
    "sample": false,
    "comments": [
        {
            "id": 1,
            "account": "todo@local.nl",
            "date": "08-11-2018 17:13",
            "text": "ABC"
        }
    ],
    "id": 100000001,
    "status": 103,
    "substatus": null,
    "verdict": null,
    "owner": 101,
    "dateSubmitted": "01-01-2018",
    "dateClosed": null,
    "type": 100,
    "reference": "123459850"
}
 [TestMethod]
        public void CaseController_GetCase_Test()
        {
            var CaseObject = new CaseDto<object>()
            {
                Id = 100000001,
                Verdict = null,                
                DateSubmitted = "01-01-2018",
                DateClosed = null,
                Reference = "123459850"

            };        




            var CaseTest = new CaseEditDto<object>();
            // Case entity =   UnitOfWork.GetRepository<Case>()

        }
我试着这样做:

[TestMethod]
public void CaseConroller_ReturnDetailData_Test()
{
    //Arrange
    var dto = new Case();
    var mockService = new Mock<ICaseProcess>();
    var Casecontroller = new CaseController(ICaseDto<Case>);
    var expected = new CaseEditDto();
    //var dataSource = new

    CaseProcess.Setup(a => a.Should(dto))

    //Act

    // var result = "hallo";

    //Assert
    result.Should().BeEquivalentTo();
}
 public CaseController(ICaseProcess caseProcess)
        {
            _caseProcess = caseProcess;
        }
 //Arrange
            var dto = new Case();
            var mockService = new Mock<ICaseProcess>();
            var casecontroller = new CaseController(CaseProcess.Object);
            var expected = new CaseEditDto();

            //Act

             var result = casecontroller.Get(100000001);

            //Assert
            result.Should().BeEquivalentTo(expected);
{
    "details": {
        "name": "Val van Urquhart",
        "dateOfBirth": "11 september 1933"
    },
    "dateSubmittedFormatted": "1 januari 2018",
    "dateClosedFormatted": null,
    "sample": false,
    "comments": [
        {
            "id": 1,
            "account": "todo@local.nl",
            "date": "08-11-2018 17:13",
            "text": "ABC"
        }
    ],
    "id": 100000001,
    "status": 103,
    "substatus": null,
    "verdict": null,
    "owner": 101,
    "dateSubmitted": "01-01-2018",
    "dateClosed": null,
    "type": 100,
    "reference": "123459850"
}
 [TestMethod]
        public void CaseController_GetCase_Test()
        {
            var CaseObject = new CaseDto<object>()
            {
                Id = 100000001,
                Verdict = null,                
                DateSubmitted = "01-01-2018",
                DateClosed = null,
                Reference = "123459850"

            };        




            var CaseTest = new CaseEditDto<object>();
            // Case entity =   UnitOfWork.GetRepository<Case>()

        }
[TestMethod]
公共无效案例控制器\u GetCase\u测试()
{
var CaseObject=new CaseDto()
{
Id=10000001,
裁决=无效,
DateSubmitted=“01-01-2018”,
DateClosed=null,
Reference=“123459850”
};        
var CaseTest=new CaseEditDto();
//案例实体=UnitOfWork.GetRepository()
}

根据显示的代码片段,假设控制器看起来像

public sealed class CaseController : ApiControllerBase {
    private readonly ICaseProcess caseProcess;

    public CaseController(ICaseProcess caseProcess) {
        this.caseProcess = caseProcess;
    }

    [HttpGet]
    [Route("{id:int}")]
    public ICaseDto<object> Get(int id) {
        return caseProcess.GetCase(id);
    }
}
公共密封类CASE控制器:ApiControllerBase{
私有只读ICaseProcess caseProcess;
公共案例控制员(ICaseProcess案例处理){
this.caseProcess=caseProcess;
}
[HttpGet]
[路由(“{id:int}”)]
要获取的公用ICASED(int id){
returncaseprocess.GetCase(id);
}
}
一个非常简单的测试是模拟依赖项,将其注入被测主题,执行测试,然后断言预期的行为

[TestMethod]
public void CaseConroller_ReturnDetailData_Test() {
    //Arrange
    //mock the dependency
    var id = 100000001;
    var expected = Mock.Of<ICaseDto<object>>();
    var mockService = new Mock<ICaseProcess>();
    mockService.Setup(_ => _.GetCase(id)).Returns(expected);
    //inject it into the subject under test
    var subject = new CaseController(mockService.Object);

    //Act
    var actual = subject.Get(id); //exercise the test

    //Assert
    //assert the expected behavior
    actual.Should().BeEquivalentTo(expected);
}
[TestMethod]
公共无效案例滚动返回详细数据测试(){
//安排
//模仿依赖关系
var-id=100000001;
var expected=Mock.Of();
var mockService=new Mock();
mockService.Setup(=>quot.GetCase(id)).Returns(预期);
//将其注入受试者体内
var subject=newcasecontroller(mockService.Object);
//表演
var actual=subject.Get(id);//练习测试
//断言
//断言预期的行为
实际的.Should().beequivalento(预期的);
}

没有“测试”这样的东西来测试某些东西。你必须准确描述你想要测试的内容。这包括成员的每个输入和预期输出。换句话说:当您的方法提供了以下参数集时,它应该做什么。。。当使用这组参数时,它应该做什么,等等。可能有数百个测试来测试哪怕是一个方法。无论如何,你不能向我们展示你的控制器的构造函数。我假设它需要一个
ICaseProcess
的实例。在这种情况下,
新的CaseController(ICaseDto)
甚至不会编译。我已经更新了postYes,谢谢你确定那是编辑案例的数据什么编辑案例?你试过我建议的答案了吗?是的,谢谢,这很有效。但现在它与对象的属性有关