2015-03-30 3 views
0

Что было бы правильной вещью для каждого случая?Правильная модульная проверка Философия

1: Контекст: Тестирование функции, которая создает базу данных, а также создание метаданных для этой базы данных

Вопрос: Обычно случаи модульного тестирования должны быть независимыми, но если мы хотим, чтобы убедиться, что функция поднимает исключение при попытке создать дублируемую базу данных, было бы приемлемо иметь упорядоченные тестовые примеры, когда первая проверяет, работает ли эта функция, а вторая проверяет, не сработает ли она при ее повторном вызове?

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

ответ

0

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

Нет, заказанные тесты плохие. Там ничего не мешает вам иметь тестовый вызов другого метода, который случается испытание, хотя:

@Test 
public void createDataBase(){ 
    ... 
} 

@Test 
public void creatingDuplicateDatabaseShouldFail(){ 
    createDataBase(); 
    try{ 
     //call create again should fail 
     //could also use ExpectedException Rule here 
     createDataBase(); 
     fail(...); 
    }catch(...){ 
    ... 
    } 
} 

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

Если вы используете инфраструктуру тестирования базы данных, такую ​​как DbUnit или что-то подобное, она может повторно использовать одну и ту же настройку db снова и снова в каждом тесте.

+0

Удостоверенные тесты хороши, если ваше тестовое исполнение основано на скорости и объеме. Например, сначала выполните единичные тесты, а затем, если все проходит, выполните тесты интеграции. –

+0

Это не то же самое «упорядоченное», о чем спрашивает ОП. В этом случае упорядоченное означает «выполнить этот модульный тест до этого».Разделение модульных тестов и интеграционных тестов (или аналогичная категория на основе скорости) является прекрасным и часто полезным, но порядок выполнения тестов в каждой из этих групп не должен иметь значения – dkatzel

+0

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

1

Ваш автоматизированный тест должен моделировать следующее:

  1. Настройка
  2. Упражнение (SUT)
  3. Проверьте
  4. Teardown

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

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

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

Смежные вопросы