Moq MongoDB UpdateOneAsync метод для модульного тестирования - PullRequest
0 голосов
/ 11 февраля 2019

Я хочу обновить метод moq, использующий mongodbContext.вот что я пытаюсь сделать, но это не работает.как передать UpdateResult тип возвращаемого значения .ReturnsAsync<UpdateResult>().Я новичок в модульном тестировании базы данных Mongodb с ядром .net.

 public void UpdateEventAsync_Test()
        {
            //Arrange
            var eventRepository = EventRepository();
            var pEvent = new PlanEvent
            {
                ID = "testEvent",
                WorkOrderID = "WorkOrderID",
                IsDeleted = false,
                IsActive = true,
                EquipmentID = "EquipmentID"
            };
            ////Act

            mockEventContext.Setup(s => s.PlanEvent.UpdateOneAsync(It.IsAny<FilterDefinition<PlanEvent>>(), It.IsAny<UpdateDefinition<Model.EventDataModel.PlanEvent>>(), It.IsAny<UpdateOptions>(), It.IsAny<System.Threading.CancellationToken>())).ReturnsAsync<UpdateResult>();
            var result = eventRepository.UpdateEventAsync(pEvent);
            ////Assert
            result.Should().NotBeNull();
            Assert.AreEqual(true, result);

        }

ниже приведен код, для которого я хочу написать Moq Test

   public async Task<bool> UpdateEventAsync(Model.EventDataModel.PlanEvent eventobj)
    {
        var filter = Builders<Model.EventDataModel.PlanEvent>.Filter.Where(f => f.ID == eventobj.ID);

        // TO Do: Use replace instead of update.
        var updatestatement = Builders<Model.EventDataModel.PlanEvent>.Update.Set(s => s.IsDeleted, eventobj.IsDeleted)
            .Set(s => s.EquipmentID, eventobj.EquipmentID)
            .Set(s => s.PlannedStartDateTime, eventobj.PlannedStartDateTime)
            .Set(s => s.PlannedEndDatetime, eventobj.PlannedEndDatetime)
            .Set(s => s.WorkOrderID, eventobj.WorkOrderID)
            .Set(s => s.ResourceID, eventobj.ResourceID)
            .Set(s => s.LastUpdatedBy, eventobj.LastUpdatedBy)
            .Set(s => s.EventComment, eventobj.EventComment)
            .Set(s => s.SiteID, eventobj.SiteID)
            .Set(s => s.LastUpdatedDateTime, DateTime.UtcNow.ToString());

        UpdateResult updateResult = await _eventContext.PlanEvent.UpdateOneAsync(filter, updatestatement);
        return updateResult != null && updateResult.IsAcknowledged && updateResult.ModifiedCount > 0;
    } 

1 Ответ

0 голосов
/ 11 февраля 2019

Либо создайте экземпляр или макет UpdateResult и верните его из настройки

public async Task UpdateEventAsync_Test() {

    //...omitted for brevity

    var mockUpdateResult = new Mock<UpdateResult>();
    //Set up the mocks behavior
    mockUpdateResult.Setup(_ => _.IsAcknowledged).Returns(true);
    mockUpdateResult.Setup(_ => _.ModifiedCount).Returns(1);

    mockEventContext
        .Setup(_ => _.PlanEvent.UpdateOneAsync(It.IsAny<FilterDefinition<PlanEvent>>(), It.IsAny<UpdateDefinition<Model.EventDataModel.PlanEvent>>(), It.IsAny<UpdateOptions>(), It.IsAny<System.Threading.CancellationToken>()))
        .ReturnsAsync(mockUpdateResult.Object);

    //Act
    var result = await eventRepository.UpdateEventAsync(pEvent);

    //Assert
    result.Should().Be(true);

}

Также обратите внимание, что для точного выполнения теста необходимо выполнить асинхронное выполнение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...