2015-01-17 5 views
1

Я пытаюсь издеваться классом, который имеет зависимость от конкретного класса, так же, как:классы AutoMocking с неинтерфейсными зависимостями ... Поддерживает ли среда поддержку?

AutoMockContainer with support for automocking classes with non-interface dependencies

Я попробовал 3-й различное AutoMocking рамочных (UnityAutoMoq, AutoMoq и AutoMockContainer содержащегося в Moq.Contrib). Ни одна из этих фреймворков не поддерживает создание mocks для конкретных зависимостей. Я понимаю, что Марк Симан привел пример, как это сделать с помощью autofac, но я не понимаю, почему он не поддерживается из коробки из этих фреймворков. Есть ли рамки, которые поддерживают это, что я не пытался? Если нет, может ли кто-нибудь помочь мне сделать это с Unity?

Я и коллега ударили головой об этом весь день, не найдя ответа, любая помощь будет принята с благодарностью.

ответ

1

Собственно, это не поддерживается. По крайней мере, не указанные выше рамки. Авто Mocking стратегия строитель код идет ниже

if (type.IsInterface || type.IsAbstract) 
{ 
    context.Existing = GetOrCreateMock(type); 
    context.BuildComplete = true; 
} 

Moq.Mock использует Замок динамических прокси и не способны генерировать динамические прокси на невиртуальных типов.

Отдельное примечание: Я лично считаю, что это по уважительной причине, так как не позволяет создавать прокси-серверы на не виртуальных типах, что позволяет разработчикам часто использовать виртуальные типы i.e abstract/interfaces. Это также означает программирование на основе интерфейса и помогает в тестировании и ремонтопригодности, что способствует лучшему дизайну.

Если вы действительно хотите использовать эти возможности, следующий шаг будет посвящен объектно-ориентированным объектам без прокси-сервера, таким как TypeMock, которые не являются бесплатными.