【发布时间】:2016-02-18 09:55:36
【问题描述】:
我正在使用 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 中使用正则表达式的方式有关
【问题讨论】:
-
您确定正则表达式语法甚至可以用作
IN ...子句的一部分吗?我认为它更适合与字段匹配,例如SELECT * FROM users WHERE email = '.*gmail\.com';? -
为什么不呢?查询只是一个字符串。例如,我需要一个正则表达式来表示“select * from table where whatever here group by type, date;”
-
是的,你是对的。我看到它现在在做什么。您可能会发现一些examples here 有助于理解正则表达式语法。看起来你可能想要
... where userId in \\(.*\\)。 -
@aroth 感谢您的链接。但是在我的问题中用 .* 替换 * 仍然没有帮助。我在链接上阅读更多内容,看看我做错了什么:(
-
我认为这是因为您需要在查询中转义文字
*。否则,作为正则表达式,它匹配“selectfrom table ...”。如果您想使用正则表达式并在查询中包含文字 *,则需要对文字字符进行转义。
标签: java mocking mockrunner