moq mongodb метод InsertOneAsync - PullRequest
       7

moq mongodb метод InsertOneAsync

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

Я просто хочу вставить метод moq, который использует mongodbContext.вот что я пытаюсь сделать, но это не работает.Я очень новичок в базе данных Mongodb с ядром .net.Любая помощь будет высоко оценена

Ответы [ 2 ]

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

@ Nkosi Большое спасибо за вашу помощь.Наконец я нашел способ.мне не хватало лишних параметров moq It.IsAny<System.Threading.CancellationToken>() ниже - рабочий тест

    public void InsertEventAsync_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.InsertOne(It.IsAny<PlanEvent>(), It.IsAny<InsertOneOptions>(),It.IsAny<System.Threading.CancellationToken>()));
            var result = eventRepository.InsertEventAsync(pEvent);
            ////Assert
            result.Should().NotBeNull();
            Assert.AreEqual(pEvent.ID, result);

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

Предполагается,

public class EventRepository {
    private readonly IFMPContext eventContext;

    public EventRepository(IFMPContext eventContext) {
        this.eventContext = eventContext;
    }

    public async Task<string> InsertEventAsync(Model.EventDataModel.PlanEvent eventobj) {
        eventobj._id = ObjectId.GenerateNewId();
        eventobj.CreatedDateTime = DateTime.UtcNow.ToString();
        try {
            await eventContext.PlanEvent.InsertOneAsync(eventobj);
            return eventobj.ID;
        } catch (Exception ex) {
            string x = ex.Message;
        }
        return "";
    }
}

Необходимо настроить тест для поддержки асинхронной природы тестируемого метода

public async Task InsertEventAsync_Test()
{
    //Arrange
    var expected = "testEvent";
    var pEvent = new PlanEvent {
        ID = expected,
        WorkOrderID = "WorkOrderID",
        IsDeleted = false,
        IsActive = true,
        EquipmentID = "EquipmentID"
    };

    var mockEventContext = new Mock<IFMPContext>();
    mockEventContext
        .Setup(_ => _.PlanEvent.InsertOneAsync(It.IsAny<PlanEvent>(), It.IsAny<InsertOneOptions>()))
        .ReturnsAsync(Task.FromResult((object)null));

    var eventRepository = new EventRepository(mockEventContext.Object);

    //Act
    var actual = await eventRepository.InsertEventAsync(pEvent);

    //Assert
    actual.Should().NotBeNull()
    actual.Should().Be(expected);

}

Необходимо обновить определение метода теста, чтобы оно было асинхронным по отношению кпозвольте ожидаемому методу быть ожидаемым.Также необходимо настроить ложную зависимость таким образом, чтобы асинхронный поток продолжался, как и ожидалось, при вызове.

...