Модульный тест. NET Контроллер веб-API Core 3 - PullRequest
1 голос
/ 06 августа 2020

У меня есть контроллер в проекте веб-API. NET Core v3

public class MyController : ControllerBase
{
    private readonly IService service;

    public MyController (IService service)
    {
        this.service= service;
    }

    HttpGet("{id}")]
    public async Task<ActionResult<MyModel>> Get(int id)
    {
        var record= await service.GetAsync(id);

        if (record== null)
            return NotFound();

        return Ok(Convert to model before returning);
    }
 }

Я пытаюсь написать модульный тест для метода Get с помощью NUnit.

Это то, что у меня есть, и оно работает:

[Test]
public void Get_WhenCalled_ReturnNotFound()
{
    service = new Mock<IService>();
    controller = new MyController(service.Object);

    service.Setup(service => service.GetAsync(1)).ReturnsAsync((MyType)null);

    var result = controller.Get(1);

    Assert.That(result.Result.Result, Is.TypeOf<NotFoundResult>());
}

Но в assert я должен позвонить result.Result.Result. Это выглядит немного странно. Могу ли я обойти это?

Я также пробовал следующую строку, но она та же:

service.Setup(service => service.GetAsync(1)).Returns(Task.FromResult((MyType)null));

1 Ответ

2 голосов
/ 06 августа 2020

Вы можете уменьшить 1 результат, написав тест с использованием async / await.

[Test]
public async Task Get_WhenCalled_ReturnNotFound()
{
    service = new Mock<IService>();
    controller = new MyController(service.Object);

    service.Setup(service => service.GetAsync(1)).ReturnsAsync((MyType)null);

    var result = await controller.Get(1);

    Assert.That(result.Result, Is.TypeOf<NotFoundResult>());
}
...