2013-04-26 2 views
1

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

[TestFixture] 
    public class CompanyRepositoryTests 
    { 
     public void CreateCompany() 
     { 
      // This must be called 1 
     } 

     public void UpdateCompany() 
     { 
      // This must be called 2 
     } 

     public void DeleteCompany() 
     { 
      // This must be called 3 
     } 
    } 
+1

Каждое испытание должно быть независимым, что необязательно. Любые данные, необходимые для теста, должны быть созданы в рамках теста. –

+0

Значит, мне нужно вызвать три метода: Создать, обновить и удалить внутри одного метода, скажем: «CRUDCompany»? – Sergey

ответ

4

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

public void createCompany(Company c) { 
    if (c == null) { 
    throw new NullPointerException(); 
    } 
    database.create(c); 
} 

Хороший тест для него будет только тест две вещи:

  1. Если null передается в, NullPointerException выбрасывается
  2. Если не- null передается в, database.create() вызывается

ли database.create() на самом деле ничего полезного - это другой вопрос. Это связано с модульным тестированием базы данных.

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

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

  • тест 1: новая база данных: создайте компанию, убедитесь, что она есть.
  • тест 2: новая база данных: создайте компанию, удалите ее, убедитесь, что она ушла.
  • тест 3: новая база данных: создать компанию, изменить ее, убедиться, что она работала.

каждый тест должен начинаться с нуля.

+0

Спасибо! Очень хороший подход. Я последую за ним. Большое вам спасибо, друг – Sergey

+0

Быстрый вопрос. Как обеспечить и создавать каждый раз новую базу данных? – Sergey

0

Вы можете издеваться над зависимостями.

хава взгляд на http://code.google.com/p/mockito/

+0

Я не хочу вообще насмехаться. Я буду использовать тестовую базу данных + метод должен быть протестирован в той же базе данных – Sergey

1

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

Good tutorial about unit tests