Проверка вызова функции на фиктивном объекте, не совпадающем при использовании массива params - PullRequest
0 голосов
/ 15 мая 2011

У меня есть следующий тест:

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

1 Ответ

3 голосов
/ 18 мая 2011

Кажется, вы слишком много тестируете здесь.Вы эффективно реализуете множество внутренних функций Виндзора, отправляя вызовы от AddFacility до LoggingInterceptionFacility.Init.

Все, что вам действительно нужно проверить, это тот факт, что ваше средство вызываетядро и предположим, что Виндзор делает правильные вещи.В конце концов, он имеет собственные модульные тесты;)

После этого тест становится намного более читабельным, что я считаю наиболее важным аспектом. Вызовы Component.For возвращают разные экземпляры между установкой и выполнением.Я обновил код, чтобы отразить это, и проверил проверку типа компонента.

...