Настройка поведения на методе, по -видимому, вызывает метод

StackOverflow https://stackoverflow.com/questions/3517869

  •  29-09-2019
  •  | 
  •  

Вопрос

Я разместил это на форумах Typemock, но слишком нетерпелив, чтобы ждать ответа там. Это очень N00B.

Я пытаюсь настроить фальшивый иконтенер. Вот что у меня есть:

var container = Isolate.Fake.Instance<IContainer>(); 
var program = Isolate.Fake.Instance<IProgram>(); 

Isolate.WhenCalled(() => container.Resolve<IProgram>()).WillReturn(program);

(IProgram это интерфейс в моем коде).

Когда я пытаюсь запустить этот код, я получаю исключение Autofac: «Запрашиваемая служба MyApp.iprogram не была зарегистрирована».

Как можно бросить это исключение? Я на самом деле не называю intaner.resolve (), верно? Я просто настраиваю его, чтобы вернуть фальшивую ипрограмму.

Несвязанная справочная информация: я испытываю TypeMock, потому что AutoFac широко использует методы расширения, и MOQ не издевается над ними.

Это было полезно?

Решение

Пара вещей, которые могут помочь - во -первых, вы можете издеваться Resolve() вызовы с MOQ путем настройки IComponentContext.Resolve(), которые делегируют все методы расширения.

Во -вторых, Autofac разработан таким образом, чтобы вам не приходилось использовать его интерфейсы из своих компонентов. Смотрите примеры:

Где вам нужно использовать (и, таким образом, насмехаться) IContainer или аналогичный интерфейс, вы, вероятно, можете сделать то же самое, используя Func, IIndex и/или Owned Типы отношений.

Надеюсь это поможет! Ник

Другие советы

К сожалению, в настоящее время есть ошибка в изоляторе, которая предотвращает фальшивые контейнеры Autofac. Мы работаем, чтобы разрешить его как можно скорее.

В то же время, есть ли причина, по которой вы не используете Autofac, как предполагалось, это означает, что он возвращает поддельный экземпляр, например:

[TestFixture]
public class TestClass
{
    private ContainerBuilder builder;
    private IContainer container;

    [SetUp]
    public void SetUp()
    {
        builder = new ContainerBuilder();
    }

    [Test, Isolated]
    public void Test1()
    {
        var fakeProgram = Isolate.Fake.Instance<IProgram>();

        builder.RegisterInstance(fakeProgram).As<IProgram>();
        container = builder.Build();

        var program = container.Resolve<IProgram>();

        Assert.AreEqual(fakeProgram, program);
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top