Максимальная длина для классов юнит-тестов? - PullRequest
11 голосов
/ 15 июля 2009

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

Существуют ли передовые практики, касающиеся максимальной длины класса модульных тестов? Должен ли я разделить свой класс модульного теста на несколько классов?

Ответы [ 4 ]

5 голосов
/ 15 июля 2009

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

Я бы сказал, что если ваш тип теста слишком длинный, то это скорее всего из-за того, что у вас много шаблонов настройки / демонтажа, что может указывать на то, что вам необходимо абстрагировать некоторых соавторов (например, использовать интерфейсы и макеты) или ввести помощника по тестированию методы рефакторинга шаблона. Это также может указывать на то, что ваш тип делает слишком много и нуждается в рефакторинге.

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

4 голосов
/ 15 июля 2009

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

10K строк - это немного много, поэтому следующий вопрос будет в том, сможете ли вы реорганизовать тест, чтобы создать закрытые вспомогательные методы для очистки любого повторяющегося кода, использовать Object Mothers или Mocking для предотвращения дублирования и т. Д. тестируем сценарии, которые совпадают, например тестирование sum () с 1 + 1 и 2 + 2 и 3 + 3, где они не являются крайними случаями.

1 голос
/ 15 июля 2009

Похоже, у вас есть большой класс, который вы пытаетесь проверить. Ваш модульный тест должен быть сосредоточен на тестировании одного класса, и если этот класс имеет настолько много функциональных возможностей, что ему требуется 10000 строчных модульных тестов, его нужно разделить. Как правило, если класс приближается к 200 строкам, его необходимо реорганизовать в несколько классов.

1 голос
/ 15 июля 2009

Я бы, конечно, разделил это. Хотя особых ограничений нет, я начинаю следить за абстракциями / декомпозициями, если мои классы превышают несколько сотен строк.

Возможно, это показатель того, что ваш тестируемый класс сам по себе слишком большой и / или, возможно, делает слишком много вещей? Можете ли вы разбить этот класс на различные четко определенные и автономные компоненты?

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