Mockrunner(Java) запрос с помощью Regex

Я использую Mockrunner для макета Sql DB для моих модульных тестов. Следующий мой запрос:-

"select * from table where userId in (" + userIds + ")"

Теперь мои userIds зависят от состояния. Мне не нужны мои тесты, зависящие от расположения в списке - userIds. Так что мне не нужно точное совпадение, но сопоставление регулярных выражений. Я уже включил сопоставление регулярных выражений по следующему коду:-

    StatementResultSetHandler statementHandler = connection.getStatementResultSetHandler();
    usersResult = statementHandler.createResultSet("users");
    statementHandler.setUseRegularExpressions(true);
    //How to write this regex query?
    statementHandler.prepareResultSet("select * from table where userId in .*", campaignsResult); 

Но, как отмечается, я понятия не имею о синтаксисе регулярных выражений, поддерживаемом Mockrunner.

Изменить: я не могу сопоставить запросы, такие как "Select * from tables" с "Select * from tab .*", Так что это связано с тем, как я использую регулярное выражение с Mockrunner

1 ответ

Решение

Здесь есть несколько полезных примеров. Например:

public void testCorrectSQL() throws Exception {
    MockResultSet result = getStatementResultSetHandler().createResultSet();
    getStatementResultSetHandler().prepareResultSet("select.*isbn,.*quantity.*", result);
    List orderList = new ArrayList();
    orderList.add("1234567890");
    orderList.add("1111111111");
    Bookstore.order(getJDBCMockObjectFactory().getMockConnection(), orderList);
    verifySQLStatementExecuted("select.*isbn,.*quantity.*\\(isbn='1234567890'.*or.*isbn='1111111111'\\)");
}

Исходя из этого, я предполагаю, что он использует стандартный синтаксис Java regex. В этом случае вы, вероятно, хотите:

prepareResultSet("select \\* from table where userId in \\(.*\\)", campaignsResult);

... или, возможно, более кратко (и в зависимости от того, насколько точными должны быть ваши тесты):

prepareResultSet("select .* from table where userId in .*", campaignsResult);

Главное предостережение, которое следует учитывать при включении соответствия регулярному выражению, заключается в том, что любые литеральные специальные символы, которые вы хотите в своем запросе (например, *, (, а также ) литералы) должны быть экранированы в вашем регулярном выражении, прежде чем он будет работать должным образом.

Другие вопросы по тегам