Я пытаюсь смоделировать разрешение Autofac, например
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 зарегистрирован».