Я пытаюсь издеваться в решимости Autofac, такие как«Решимость» метод расширения Mocking Autofac с TypeMock
using System;
using Autofac;
using TypeMock.ArrangeActAssert;
class Program
{
static void Main(string[] args)
{
var inst = Isolate.Fake.Instance<IContainer>();
Isolate.Fake.StaticMethods(typeof(ResolutionExtensions), Members.ReturnNulls);
Isolate.WhenCalled(() => inst.Resolve<IRubber>()).WillReturn(new BubbleGum());
Console.Out.WriteLine(inst.Resolve<IRubber>());
}
}
public interface IRubber
{}
public class BubbleGum : IRubber
{}
Исходя из Moq, синтаксис и исключения из TypeMock запутать меня очень много. Первоначально запустив это в TestMethod, я продолжал получать исключение, напоминающее «WhenCalled не может быть запущен без дополнительного поведения». Я пробовал определять поведение для всех и их матерей, но безуспешно.
Затем я отлаживал пройденный тест и увидел, что фактическое исключение было уволено из Autofac: IRubber не был зарегистрирован.
Таким образом, очевидно, что статическая функция Resolve не подделана, и я не могу ее подделать, независимо от того, как я собираюсь ее подключить.
Isolate.WhenCalled(() => ResolutionExtensions.Resolve<IRubber>(null)).WillReturn(new BubbleGum());
... сгенерирует исключение из Autofac жалуясь, что IComponentContext не может быть пустым. Подача его предположительно поддельного IContainer (или подделка IComponentContext) возвращает меня к ошибке «IRubber not registered».
Как вы бы издевались? Пользуетесь? –
Обычно можно обрабатывать 'Owned', как если бы это был базовый тип, например 'List ' или 'string' - создавать значения' Owned 'используя свой конструктор, когда вам это нужно, возможно, передавая макет для' T'. Надеюсь это поможет. –
Для параметра lifeTime ctor Собственного класса, хорошо ли это просто передать в манере IDisposable? Что действительно должно быть передано в качестве этого параметра? Благодаря! –