Как выполнить модульное тестирование фильтра [System.Web.Http.Authorize] в ASP. net с помощью Xunit - PullRequest
0 голосов
/ 27 мая 2020

Мне нужно проверить ModelState метода контроллера, у которого есть фильтр AUTHORIZE, из-за этого он недоступен.

    [Microsoft.AspNetCore.Mvc.Produces("application/json")]
    [System.Web.Http.Authorize]
    public Microsoft.AspNetCore.Mvc.ActionResult<HttpResponseMessage> CrowdSourcedData([FromBody] List<Apps> Apps)
    {
        if (!ModelState.IsValid)
        {
            return null;
        }
        return _dataProcessor.CrowdSourcedData(Apps);
    }

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

1 Ответ

0 голосов
/ 27 мая 2020

Вот несколько простых тестов, которые вы можете попробовать:

[Fact]
public void CrowdSourcedData_Valid()
{
    // Arrange
    var message = new HttpResponseMessage();
    var apps = new List<Apps>();
    var dataProcessor = new Mock<IDataProcessor>(); // Assuming "IDataProcessor" or something
    dataProcessor.Setup(x => x.CrowdSourcedData(apps)).Returns(message);
    var controller = new Controller(dataProcessor.Object); // Assuming you inject the "_dataProcessor" here

    // Act
    var result = controller.CrowdSourcedData(apps);

    // Assert
    dataProcessor.Verify(x => x.CrowdSourcedData(apps), Times.Once);
    Assert.Equal(message, result);
}

[Fact]
public void CrowdSourcedData_Invalid()
{
    // Arrange
    var message = new HttpResponseMessage();
    var apps = new List<Apps>();
    var dataProcessor = new Mock<IDataProcessor>();
    dataProcessor.Setup(x => x.CrowdSourcedData(apps)).Returns(message);
    var controller = new Controller(dataProcessor.Object);
    controller.ModelState.AddModelError("FakeError", "FakeMessage"); // Here you set the invalid "ModelState"

    // Act
    var result = controller.CrowdSourcedData(apps);

    // Assert
    dataProcessor.Verify(x => x.CrowdSourcedData(apps), Times.Never);
    Assert.Null(result);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...