Юнит тест для контроллера Api - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь написать модульный тест для контроллера Api. Это приложение на C # mvc. И модульный тест также работает с Moq.

Это контроллер:

public sealed class CaseController : ApiControllerBase
{    
    [HttpGet]
    [Route("{id:int}")]
    public ICaseDto<object> Get(int id)
    {
        return _caseProcess.GetCase(id);
    }
}

А это интерфейс:

public interface ICaseProcess
{
    ICaseDto<object> GetCase(int id);
}

И это метод:

internal sealed class CaseProcess : ProcessBase, ICaseProcess
{
    public ICaseDto<object> GetCase(int id)
    {
        var caseEntity = GetCaseById(id);

        CaseProcessHelper helper = GetHelper(caseEntity);
        object details = helper.GetReferenceDetails();

        ICaseDto<object> resultDto = CaseDto.Create(details);
        Mapper.Map(caseEntity, resultDto);
        return resultDto;
    }
}

И я пытаюсь написать модульный тест так:

[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();
}

Так как именно вы должны написать модульный тест?

У меня есть подробное представление, а затем API должен вернуть данные подробного представления.

id - это int, например: api/support/cases/100000002.

Конструктор выглядит так:

 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>()

        }

1 Ответ

0 голосов
/ 15 ноября 2018

Исходя из показанных фрагментов, предполагается, что контроллер выглядит примерно так:

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);
    }
}

Очень простым тестом было бы смоделировать зависимость, ввести ее в тестируемый объект, выполнить тест, а затемутверждать ожидаемое поведение

[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);
}
...