Должен ли метод юнит-теста превышать 200 строк? - PullRequest
3 голосов
/ 22 октября 2009

Не слишком ли плохо писать действительно длинный (более 200 строк) метод тестирования? Или я должен разбить его на более мелкие методы?

Ответы [ 6 ]

11 голосов
/ 22 октября 2009

Вы не должны (в целом) создавать метод длиной в 200 строк. Если вы можете разбить его, сделайте.

Что ты делаешь в 200 строках? Модульное тестирование должно быть тестирование небольших блоков кода. Являются ли эти 200 строк преимущественно утверждениями? Если так, то это может быть нормально.

Ключевой вопрос - кто-то может понять, что метод делает быстро, или вам сложно разобраться?

«Программы должны быть написаны в первую очередь для чтения людьми, и только случайно для запуска на машинах» (Абельсон и Суссман, Структура и интерпретация компьютерных программ)

4 голосов
/ 22 октября 2009

200 строк звучит слишком долго. Метод юнит-теста такой же, как и любой другой метод. Вы должны использовать «Метод извлечения» рефакторинг, где это возможно. Это повысит читабельность вашего кода.

Редактировать - поскольку ваш тест длительный, он также может демонстрировать ряд тестовых запахов, таких как Стремительный тест .

Обычно в тестах, которые я пишу, мне нравится быстро видеть Arrange / Act / Assert . Если у вас есть это более 200 строк, вероятно, трудно сказать, какой бит где.

2 голосов
/ 22 октября 2009

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

1 голос
/ 22 октября 2009

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

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

Но вы должны, если возможно, попытаться минимизировать количество строк в модульных тестах. Они быстро становятся очень хрупкими (легко ломаются при модификации), когда они длинные.

1 голос
/ 22 октября 2009

Длительные методы нежелательны. Они часто указывают на то, что метод делает слишком много.

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

1 голос
/ 22 октября 2009

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

О, и это, вероятно, может: -)

...