Приемы для записи лучших [закрытых] модульных тестов

Вместо списка, возможно, вы могли бы управлять Map<ParentClass, Set<ChildClass>>?

Ключом вашей карты был бы родительский класс, а значением был бы набор его дочерних элементов.

Таким образом, вы будете перебирать все дочерние элементы, и для каждого из них вы просто будете вызывать что-то вроде map.get(parent).add(child);. Очевидно, до этого вы убедитесь, что если карта еще не содержит этого родительского элемента, вы инициализируете его набор дочерних пустой набор:

if (!map.containsKey(parent)) {
   map.put(parent, new HashSet());
}

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

HTH!

5
задан Fung 2 April 2009 в 03:22
поделиться

7 ответов

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

Структура (шаблонных) тестов следует за довольно предсказуемым синтаксисом, и шаблон допускает реализацию module/object-specific наращивания/слезы вниз (мы также используем базовый класс для всех тестов к encapsule некоторая логика).

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

2
ответ дан 18 December 2019 в 07:10
поделиться

Читайте книга как Искусство Поблочного тестирования определенно поможет.

2
ответ дан 18 December 2019 в 07:10
поделиться

Тесты записи перед написанием кода (т.е.: Разработка через тестирование). Если по некоторым причинам Вы неспособны к тестам записи прежде, запишите им, поскольку Вы пишете код. Удостоверьтесь, что все тесты перестали работать первоначально. Затем спуститесь по списку и зафиксируйте каждого поврежденный в последовательности. Этот подход будет вести для лучше кодирования и лучшие тесты.

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

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

4
ответ дан 18 December 2019 в 07:10
поделиться
  1. Запишите много тестов на метод.
  2. Протестируйте возможный пустяк. Затем протестируйте следующий пустяк.
  3. Протестируйте все разумные входные и выходные диапазоны. IOW: Если Ваш метод возвращает булевскую переменную, удостоверьтесь, что протестировали ложь и истинные возвраты. Для интервала?-1,0,1, n, n+1 (доказательство математической индукцией). Не забывайте проверять на все Исключения (принимающий Java). 4a. Запишите абстрактный интерфейс сначала. 4b. Запишите свои вторые тесты. 4c. Запишите свою реализацию в последний раз.
  4. Используйте Внедрение зависимости. (для Java: Guice - предположительно, лучше, Spring - вероятно, достаточно хороший)
  5. Дразните сотрудников своей "Единицы" с хорошим инструментарием как mockito (принимающий Java, снова).
  6. Google очень.
  7. Держите стук отдельно в нем. (Мне потребовались 2 года - без большого количества справки, но для Google - чтобы начать "получать его".)
  8. Прочитайте хорошую книгу о теме.
  9. Промывка, повториться...
11
ответ дан 18 December 2019 в 07:10
поделиться

Насколько политика идет, читает ответ Kent Beck на Так, особенно:

протестировать как можно меньше для достижения данного уровня уверенности

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

1
ответ дан 18 December 2019 в 07:10
поделиться

У меня есть рубиновый сценарий, который генерирует тестовые тупики для "коричневого" кода, который не был создан с TDD. Это пишет мой сценарий сборки, настраивает, включает/использования и пишет установку/разрушение для инстанцирования тестового класса в тупике. Помогает запуститься с последовательной начальной точки без всей скуки ввода, когда я взламываю в коде, написанном в Dark Times.

1
ответ дан 18 December 2019 в 07:10
поделиться

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

Например, учитывая код как это:

void MyClass::UpdateCacheInfo(
    CacheInfo *info)
{
    if (mCacheInfo == info) {
        return;
    }
    info->incrRefCount();
    mCacheInfo->decrRefCount();
    mCacheInfo = info
}

Набор тестов для этой функции имел бы следующие тесты в порядке:

test UpdateCacheInfo_identical_info
test UpdateCacheInfo_increment_new_info_ref_count
test UpdateCacheInfo_decrement_old_info_ref_count
test UpdateCacheInfo_update_mCacheInfo
1
ответ дан 18 December 2019 в 07:10
поделиться
Другие вопросы по тегам:

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