2012-11-29 5 views
2

Я хочу создать Testclass для класса, который считывает данные из базы данных и преобразует их. Тест-класс должен проверить эту функцию преобразования. Но я могу проверить эту функцию, мне нужен объект ResultSet.Создание объекта ResultSet самостоятельно

Как я могу заполнить некоторые данные в объекте ResultSet без подключения к базе данных?

+1

Willkommen. Попробуйте использовать mockito http://code.google.com/p/mockito/ или http://www.easymock.org/. Фогель сделал хороший учебник здесь: http://www.vogella.com/articles/EasyMock/article.html – Rekin

ответ

1

Чтение из баз данных относится к интеграционные испытания, а не модульные испытания. Таким образом, вы можете и должны использовать оригинал ResultSet, так как интеграционный тест берет на себя реальные бэкэнды (например, вашу базу данных).

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

1

Нечто похожее на код: Вам нужен интерфейс для доступа к Db. Этот интерфейс используется в коде и тестового кода: myDbConnectionMock является Mock объект, который имеет такой же интерфейс, как соединение Db, но это объект, который вы создаете и где вы Cann заполнить то, что вы хотите:

я бы не использовал Mockito или хуже EasyMock.

кода я напечатал в текстовом редакторе (надеюсь compileable, может и нет):

public void testDBConnection() { 

    IDataBaseConnection conn = new MyDbConnectionMock(); 

    conn.connect(); 
    Set<Result> result = conn.readData(); 

    assertTrue(result.size > 0); 
} 

где

// Interface for DB connection, adapt to real DB connection 
    public interface IDataBaseConnection { 
     boolean connect(); 
     Set<Result> readData(); 
    } 

и

// DB connection Mock 
class MyDbConnectionMock implements IDbConnection { 
    public void connect() { 
    return true; 
    } 

    public Set<ResultSet> readData() { 
    Set<Result> resultSet = new HashSet<Result>(); 
    Result res1 = new Result(20); 
    resultSet.add(res1); 

    Result res1 = new Result(30); 
    resultSet.add(res2); 
    return resultSet; 
    } 
} 
Смежные вопросы