Как настроить ожидания на возвращаемое значение ложного вызова с помощью jmock?

Я использую jmock для запуска некоторых тестов. Я хотел бы убедиться, что сторонняя библиотека будет правильно вызывать следующую последовательность в JDBC API:

context.checking(new Expectations() {{
    oneOf(connection).prepareStatement("test");
    oneOf(statement).setFetchSize(10);
    oneOf(statement).executeQuery();
}});

connection Объект создан как таковой:

Mockery context = new Mockery();
connection = context.mock(Connection.class);

Как мне создать statement объект? Я пробовал это, ни работал:

// This creates an independent PreparedStatement mock, not the one that will be returned
// by the Connection.prepareStatement call
PreparedStatement statement = context.mock(PreparedStatement.class);

// This doesn't return a mock object, which I can pass to the oneOf() method.
PreparedStatement statement = oneOf(connection).prepareStatement("test");

1 ответ

Решение

Вы должны использовать will(returnValue(...)) в ваших ожиданиях указать результат, вот так:

context.checking(new Expectations() {{
    oneOf(connection).prepareStatement("test"); will(returnValue(statement));
    // ...
}}

Смотрите также шпаргалку JMock.

Пример, который я использую в тестах Jaybird:

final PooledConnectionHandler conHandler = context.mock(PooledConnectionHandler.class);
final Statement statement = context.mock(Statement.class);
final Connection connectionProxy = context.mock(Connection.class);
final StatementHandler handler = new StatementHandler(conHandler, statement);

context.checking(new Expectations() {
    {
        oneOf(conHandler).getProxy(); will(returnValue(connectionProxy));
    }
});
Другие вопросы по тегам