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);
Главное предостережение, которое следует учитывать при включении соответствия регулярному выражению, заключается в том, что любые литеральные специальные символы, которые вы хотите в своем запросе (например, *
, (
, а также )
литералы) должны быть экранированы в вашем регулярном выражении, прежде чем он будет работать должным образом.