Ответ 1
Вы можете сделать внутренности видимыми для Moq, добавив InternalsVisibleToAttribute
в проект assembly.cs, например:
[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")]
Почему "DynamicProxyGenAssembly2"
, а не "Moq"
? Это имя динамической сборки, созданной для размещения динамически генерируемых прокси-типов (все это обрабатывается еще одной библиотекой Castle DynamicProxy), которая используется Moq. Таким образом, вы открываете типы для динамической сборки прокси, а не для самого Moq.
Но какая точка насмешливого класса, если нет переопределяемого члена? Вы ничего не будете издеваться, и все вызовы будут использовать фактическую реализацию. Ваше второе решение,
Я предполагаю, что могу создать интерфейс (скажем, "IClassB" ), который реализует ClassB, вставлять его в ClassA и вместо этого имитировать интерфейс.
- это то, что я обычно делаю. Его цель - нечто большее, чем "поддержка unit test mocking" - это помогает вам создавать компоненты с ограниченной связью, что всегда стоит того, чего стоит стремиться.