Написание кода, проверяемого модулем? - PullRequest
37 голосов
/ 17 июня 2009

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

Ответы [ 19 ]

54 голосов
/ 17 июня 2009
  • TDD - сначала напиши тесты, силы вам думать о тестируемости и помогает написать код, который на самом деле нужно, а не то, что вы думаете, вы можете необходимо

  • Рефакторинг к интерфейсам - делает издеваться проще

  • Открытые методы виртуальные, если не используются интерфейсы - облегчает насмешку

  • Инъекция зависимости - делает насмешку легче

  • Меньшие, более целенаправленные методы - тесты более сфокусированы, легче написать

  • Избегание статических классов

  • Избегайте одиночных игр, кроме случаев, когда необходимо

  • Избегайте закрытых занятий

13 голосов
/ 17 июня 2009

Инъекция зависимости, кажется, помогает.

10 голосов
/ 17 июня 2009

Сначала напишите тесты - таким образом, тесты определяют ваш дизайн.

7 голосов
/ 17 июня 2009

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

7 голосов
/ 17 июня 2009
  1. Использовать TDD
  2. При написании кода используйте внедрение зависимости везде, где это возможно
  3. Программа для интерфейсов, а не для конкретных классов, так что вы можете заменить имитационные реализации.
5 голосов
/ 17 июня 2009

При написании тестов (как с любой другой программной задачей) не повторяйте себя (принцип СУХОГО). Если у вас есть тестовые данные, которые полезны для более чем одного теста, поместите их туда, где оба теста могут их использовать. Не копируйте код в оба теста. Я знаю, это кажется очевидным, но я вижу, что это происходит постоянно.

4 голосов
/ 17 июня 2009
4 голосов
/ 17 июня 2009

Я уверен, что за это проголосуют, но я все равно выскажу свое мнение :) 1001 *

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

Цель не в том, чтобы иметь код, который можно тестировать на единицу. Чтобы сделать код более «тестируемым», нужно приложить немало усилий, несмотря на то, что тестируемый код не является целью. Это звучит очень хорошо, и я уверен, что это дает людям теплые размышления, но правда в том, что все эти методы, рамки, тесты и т. Д. Стоят дорого.

Они стоят времени на обучение, обслуживание, снижение производительности и т. Д. Иногда оно того стоит, иногда - нет, но вам никогда не следует ставить препятствия и заряжаться, чтобы сделать ваш код более "тестируемым".

4 голосов
/ 17 июня 2009

Потратьте некоторое время на рефакторинг не тестируемого кода, чтобы сделать его тестируемым. Напишите тесты и получите 95% охват. Это научило меня всему, что мне нужно знать о написании тестируемого кода. Я не против TDD, но изучение специфики того, что делает код тестируемым или не тестируемым, помогает вам думать о тестируемости во время разработки.

4 голосов
/ 17 июня 2009

И то, что вы изучаете первым делом в ООП, но многие, кажется, забывают: Код против интерфейсов, а не реализаций .

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