Mongo mock коллекция

202
19 марта 2018, 22:34

Пытаюсь "замокать" MongoDB. В интернетах нашел что надо мокать MongoCursor (из пространства имен MongoDB.Driver) - его нет, или он не торчит.

Вот такое вот пока написано :

var collection = new Mock<IMongoCollection<UiCustomizationData>>();
collection.Setup(mongoCollection => temp);

var database = new Mock<IMongoDatabase>();
database.Setup(x =>
  x.GetCollection<UiCustomizationData>("UiCustomizationData", new MongoCollectionSettings()))
   .Returns(collection.Object);
var repo = new UiCustomizationRepository(new UiCustomizationDataContext(database.Object));

Мокаю свою базу, и хочу в коллекцию подложить свою.

Answer 1

По логике вещей нужно мокать IMongoCursor<T>, например:

var collection = new Mock<IMongoCollection<UiCustomizationData>>();
var cursorMock = new Mock<IMongoCursor<UiCustomizationData>>();
сursorMock.Setup(m => m.GetEnumerator()).Returns(temp.GetEnumerator());

и потом:

collection.Setup(m => /*Ваш запрос*/).Returns(cursorMock.Object);

В новых версия нужно мокать IAsyncCursor<T>, пробовал так (полный код):

using System;
using System.Collections.Generic;
using System.Threading;
using MongoDB.Driver;
using Moq;
namespace ConsoleApplication6
{
  public class Program
  {
    private static void Main()
    {
      var temp = new List<UiCustomizationData>
      {
        new UiCustomizationData { Name = "1" },
        new UiCustomizationData { Name = "2" }
      };
      var coll = new Mock<IMongoCollection<UiCustomizationData>>();
      var cursorMock = new Mock<IAsyncCursor<UiCustomizationData>>();
      cursorMock.Setup(x => x.Current).Returns(temp);
      coll
        .Setup(x => x.FindAsync(It.IsAny<FilterDefinition<UiCustomizationData>>(), It.IsAny<FindOptions<UiCustomizationData>>(), It.IsAny<CancellationToken>()))
        .ReturnsAsync(() => cursorMock.Object);
      var r = coll.Object.FindAsync(x => x.Id == 1).Result;
      foreach (var item in r.Current)
      {
        Console.WriteLine(item.Name);
      }
    }
  }
  public class UiCustomizationData
  {
    public int Id;
    public string Name;
  }
}
READ ALSO
C# ошибка при работе с EXCEL

C# ошибка при работе с EXCEL

Необходимо считать некоторые столбцы из документа excel для дальнейшей с ним работыНаписал код:

323
Проблемы с Null-коалесцентным оператором

Проблемы с Null-коалесцентным оператором

Правильно ли я понимаю, что следующие конструкции должны быть эквивалентны:

169
Ошибка: Uncaught SyntaxError: missing ) after argument list [требует правки]

Ошибка: Uncaught SyntaxError: missing ) after argument list [требует правки]

Не пойму, почему выбивает ошибку? Скобки все на месте

229