2014-10-08 2 views
0

У меня есть сценарий, в котором есть открытый внешний класс и частный внутренний класс. теперь я хочу создать объект этого частного внутреннего класса для модульной проверки методов в нем.Создание объекта Private Внутренний класс из другого класса

public class MyOuterClass { 
    public MyOuterClass() { } 

    private class MyInnerClass { 
     public MyInnerClass() { } 
    } 
} 

Это сценарий, в котором я пытаюсь создать объект «MyInnerClass» из какого-то другого тестового класса. Я нашел решение для создания объекта класса с частным конструктором, но это не то, что мне нужно. Пожалуйста, помогите мне с этим. благодарит заранее.

+0

Вам не нужно будет тестировать частные внутренние классы. Это должно означать, что ваш дизайн класса неверен (или ваш подход к тестированию неверен). –

+1

класс не должен иметь '()' – Rustam

ответ

0

Вся концепция объектов private состоит в том, что к нему может быть доступ только тот класс, в который он инкапсулирован. Вы не можете напрямую создать экземпляр частного объекта из другого класса.

+0

Если это так, то как можно достичь 100% -ного охвата кода при модульном тестировании, для таких типов кода существуют методы, такие как отражение для доступа к закрытым членам, но я не уверен, как это сделать для этот сценарий. – user2786437

1

У вас есть три варианта:

  1. сделать пакет внутреннего класса частным (уровень доступа по умолчанию вместо этого), и вы можете получить доступ к его, поставив тестовый код в одном пакете.

  2. Используйте отражение, чтобы получить доступ к нему, преодолев ограничение доступа.

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

+0

+1 для очков №1 и №3 (в частности, № 3). Вариант № 2 просто мрачный. –

+0

@Tim для использования # 3 Для моего сценария внутренний класс - это класс, расширяющий Handler, который переопределяет метод сообщения handle, и это нельзя вызывать напрямую, если только u не создает объект внутреннего класса. – user2786437

+0

@tim, и мы не можем изменять модификаторы доступа для всех случаев, когда это происходит правильно. поэтому я думаю, что использование рефлексии было бы лучшим способом. Могу ли вы отправить образец фрагмента кода, как новый для отражения. – user2786437

Смежные вопросы