Зарегистрируйте более одного макета или службы с помощью AutoMock.GetLoose() (Autofac.Extras.Moq)

#autofac

#autofac

Вопрос:

Я нахожусь в процессе обновления нашего Autofac.Extras.Библиотека Moq до последней версии (6.0.0) в рамках нашего модульного тестового проекта. После обновления я заметил, что тесты с использованием: var mock = AutoMock.GetLoose() , больше не поддерживают метод «Предоставить». Поэтому я начал копаться в документации в поисках какого-нибудь обходного пути.

После ознакомления с документами по началу работы (https://autofaccn.readthedocs.io/en/v5.2.0/integration/moq.html#getting-started ) Я заметил, что появился новый способ регистрации mocks и зависимых сервисов using AutoMock.GetLoose(cfg => cfg.RegisterMock(mockA)) . Однако некоторые из наших тестов требуют более одного введенного макета, и мне непонятно, как это сделать. Возьмем, к примеру:

 [Test]
public void Test()
{
var mockA = new Mock();
mockA.Setup(x => x.RunA());

var mockB = new Mock();
mockB.Setup(x => x.RunB());

// mockA is automatically registered as providing IServiceA
using (var mock = AutoMock.GetLoose(cfg => cfg.RegisterMock(mockA)))
{
// mockA will be injected into TestComponent as IServiceA
var component = mock.Create();

// ...and the rest of the test
}
}
  

Как мне зарегистрировать как MockA, так и mockB?

Спасибо.

Ответ №1:

Вы пробовали поместить обе регистрации в GetLoose лямбда-выражение?

 [Test]
public void Test()
{
  var mockA = new Mock();
  mockA.Setup(x => x.RunA());

  var mockB = new Mock();
  mockB.Setup(x => x.RunB());

  // Register both mocks here:
  using (var mock = AutoMock.GetLoose(cfg => {
    cfg.RegisterMock(mockA);
    cfg.RegisterMock(mockB);
  }))
  {
    // ...and the rest of the test
  }
}
  

Если вы пробовали это, и это не сработало, вам следует обновить свой вопрос, чтобы включить оба:

  • Что вы пробовали это и
  • Каким было сообщение об исключении или неправильный результат

В противном случае, если это сработает … 🎉

Комментарии:

1. Я думал, что пробовал это, но, кажется, мне не хватало фигурных скобок. Спасибо!