Вызов API модульного тестирования - PullRequest
0 голосов
/ 19 мая 2018

Я использую .NET Core с xUnit / Moq для создания модульных тестов.Я хотел бы создать модульный тест для следующего вызова API:

[HttpGet("{zip}")]
public IActionResult Get(int zip)
{
    //debugging here shows the repository has the object
    //but the result is always null
    Location result = repository[zip];
    if(result == null)
    {
        return NotFound();
    }
    else
    {
        return Ok(result);
    }
}

У меня есть модульный тест (который не выполняется):

[Fact]
public void Api_Returns_Json_Object()
{
    //Arrange
    Mock<IRepository> mockRepo = new Mock<IRepository>();
    mockRepo.Setup(m => m.Locations).Returns(new Location[]
    {
        new Location
        {
            zip = 88012,
            type = "STANDARD",
            state = "NM"
        }
    });

    //Arrange
    ApiController controller = new ApiController(mockRepo.Object);

    // Act
    var response = controller.Get(88012);

    // Assert
    Assert.True(response.Equals(HttpStatusCode.OK));
}

Когда я отлаживаю, репозиторий показываетправильный Location объект, но результат всегда равен нулю, возвращая код состояния NotFound().

Если я проверяю ответ с помощью PostMan, он работает правильно.

Вот соответствующие IRepository участники:

IEnumerable<Location> Locations { get; }
Location this[int zip] { get; }

1 Ответ

0 голосов
/ 19 мая 2018

Исходя из того, что используется в тестируемом методе, при организации теста был установлен неправильный элемент

[Fact]
public void Api_Returns_Json_Object() {
    //Arrange
    int zip = 88012;
    var location = new Location
    {
        zip = zip,
        type = "STANDARD",
        state = "NM"
    };

    Mock<IRepository> mockRepo = new Mock<IRepository>();
    mockRepo.Setup(m => m[zip]).Returns(location);
    var controller = new ApiController(mockRepo.Object);

    // Act
    var response = controller.Get(zip);
    var okResult = response as OkObjectResult;

    // Assert
    Assert.NotNull(okResult);
    Assert.Equal(location, okResult.Value);
}
...