次のような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());
... IComponentContext を null にすることはできないという不平を言う Autofac から例外をスローします。おそらく偽造された IContainer をフィードする (または代わりに IComponentContext を偽造する) と、「IRubber が登録されていません」というエラーに戻ります。