Создание класса, который имеет внутренний модификатор - PullRequest
1 голос
/ 13 февраля 2012

Я пытаюсь выполнить модульное тестирование некоторого кода, который использует библиотеку, внутренняя зависимость которой скрыта через модификатор класса «internal».

Во время настройки тестов я хотел бы иметь возможность создать экземпляр внутреннего класса.Обычно я хотел бы попробовать что-то вроде:

var type = typeof (FooBar);
var parameterlessCtor = (from c in type.GetConstructors(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
                        where c.GetParameters().Length == 0 select c).FirstOrDefault();

object instance;
if(parameterlessCtor != null)
{
    instance = parameterlessCtor.Invoke(null);
}

Очевидная проблема с этим 'typeof (FooBar)' - я не могу сделать typeof для внутреннего типа.

Любые идеи, если явсе равно можно обойти это?

О, и я не могу перестроить сборку с внутренне видимым атрибутом ...

Ответы [ 2 ]

3 голосов
/ 13 февраля 2012

Нет, но вы можете извлечь тип из его полного имени, используя GetType

var type = Type.GetType("YourNameSpace.Foobar, YourNameSpace, Version=x.Y.Z.K, Culture=neutral, PublicKeyToken=xyz");
0 голосов
/ 13 февраля 2012

Для этого можно использовать рефлексию.

        Type type = typeof (Class1).Assembly.GetType("Class2");
        object instance = Activator.CreateInstance(type);

Где Class1 - это открытый класс в той же сборке, что и ваш внутренний тип, а Class2 - ваш внутренний тип.

Не самый хорошийрешение, и вам придется использовать отражение, чтобы вызвать методы, поскольку вы не можете привести, но это работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...