次のテストがあります。
[Test]
public void VerifyThat_WhenInitializingTheLoggingInterceptionFacility_TheLoggingInterceptorIsAdded()
{
var kernel = new Mock<IKernel>(MockBehavior.Loose)
{
DefaultValue = DefaultValue.Mock
};
kernel.Setup(k => k.AddFacility<LoggingInterceptionFacility>())
.Returns(kernel.Object)
.Callback(() => ((IFacility)new LoggingInterceptionFacility()).Init(kernel.Object, Mock.Of<IConfiguration>()));
kernel.Setup(k => k.Register(It.IsAny<IRegistration[]>()))
.Returns(kernel.Object)
.Verifiable();
kernel.Object.AddFacility<LoggingInterceptionFacility>();
kernel.Verify(k => k.Register(It.Is<IRegistration[]>(r => r.Contains(Component.For<LoggingInterceptor>()))));
}
ご覧のとおりInit(IKernel, IConfiguration)
、保護されたInit()
メソッドを呼び出すファシリティーのメソッドを呼び出して、カーネルの実際の動作を模倣しています。
保護された Init() は次のようになります。
protected override void Init()
{
Kernel.ProxyFactory.AddInterceptorSelector(new LoggingModelInterceptorsSelector());
Kernel.Register(Component.For<LoggingInterceptor>());
}
検証がパスすることを期待していましたが、パスしません。Kernel.Register がIt.IsAny<LoggingInterceptor>()
テスト パスでまったく呼び出されたことを確認した場合。
ここで一致しないものは何ですか? このテストに合格する方法はありますか?