У меня есть следующий тест:
[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>()
, тест проходит успешно.
Что я не соответствую прямо здесь?Есть ли способ сделать этот тест успешным?