Как я должен протестировать закрытые методы в Java? [дубликат]

Возможный Дубликат: каков лучший способ закрытых методов поблочного тестирования?

Я - программист новичка, и я не знаю, как записать приложение, которое будет хорошо структурировано для поблочного тестирования. Я хочу записать приложения со способностью впоследствии добавить тесты годного изделия.

Проблема с private методы - они не могут тестировать с за пределами их классов.

Если я решаю эту проблему путем изменения всех методов, которые являются private кому: protected, и позвольте тестовому классу расширить исходный класс? Или есть ли лучшее решение?

Мое решение (частный splitLetters => защитил splitLetters) будет работать как это:

Исходный класс:

class MyClass{
  protected splitLetters(int num){
    return num+2;
  }
}

Тестовый класс:

class Test_MyClass extend MyClass{
  public splitLettersTest(){
  for(int i=0;i<100;i++){
    System.println(parent.splitLetters(i));
  }
 }
}

Решения:

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

  2. Вложенный способ класса протестировать - проблематичный, потому что QA вносит изменения в исходном коде

  3. Отражение - Если это позволяет назвать закрытые методы, это похоже на отличное решение http://www.artima.com/suiterunner/private3.html (я должен узнать больше для понимания отражения. Я не понимаю, как отражения не повреждают всю идею наличия открытых и закрытых методов, если мы можем назвать закрытые методы от другого класса.)

  4. Не определяют закрытые методы (когда я показал в своем решении) - проблематичный, потому что иногда мы должны определить закрытый метод.

22
задан Sufian 29 August 2017 в 07:53
поделиться

5 ответов

Вам не нужно тестировать частные методы.

  • Частный метод - это, в частности, часть реализации. Вы должны тестировать не реализацию, а функциональность. Если вы тестируете функциональность, предоставляемую классом, вы можете изменить реализацию в зависимости от модульного теста.
  • Если вы чувствуете необходимость протестировать частный метод, это хороший признак того, что вам следует переместить частный метод в другой класс и сделать метод общедоступным. Делая это, вы получаете меньшие классы, и вы можете легко тестировать методы. Если вы не хотите раскрывать этот новый класс, вы можете сделать его закрытым для пакета (модификатор доступа по умолчанию).
37
ответ дан 29 November 2019 в 04:40
поделиться

Тестирование частных методов подразумевает тестирование реализации, а не функциональности. Подумайте очень тщательно о том, зачем вы хотите тестировать частные методы, и вы можете обнаружить, что вам вообще не нужно их тестировать.

3
ответ дан 29 November 2019 в 04:40
поделиться

Я лично считаю, что вам следует (по возможности) тестировать только поведение, доступное конечному пользователю этой функциональности, и поэтому вам не следует тестировать частные методы:

  1. Тест ничего не доказывает за исключением того, чтобы показать, что часть внутренней функциональности «работает» в соответствии с чем-то, что не имеет смысла для людей, фактически использующих ваше программное обеспечение.

  2. Если вы измените / перефакторите свою внутреннюю реализацию, вы можете обнаружить, что ваши модульные тесты начинают давать сбой, когда на самом деле открытая внешняя функциональность вообще не изменилась!

Конечно, вы можете разделить большие проекты на более мелкие функциональные блоки, и в этом случае вы можете выбрать модульное тестирование интерфейсов между интерфейсами (например, вы можете выбрать модульное тестирование уровня доступа к данным, несмотря на то, что что реализация DAL не влияет напрямую на конечного пользователя).

3
ответ дан 29 November 2019 в 04:40
поделиться

На мой взгляд, частные методы не должны быть проверенным. Тесты предназначены для интерфейсов (в широком смысле этого слова).

-3
ответ дан 29 November 2019 в 04:40
поделиться

Вам не нужно тестировать частные методы. Когда вы тестируете свои общедоступные методы, теоретически они должны тестировать и ваши частные методы.

2
ответ дан 29 November 2019 в 04:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: