我正在使用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中使用正则表达式的方式有关 最佳答案
有一些有用的示例available here。例如:
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 syntax。在这种情况下,您可能需要:
prepareResultSet("select \\* from table where userId in \\(.*\\)", campaignsResult);
...或者可能更简洁(并取决于测试的精确程度):
prepareResultSet("select .* from table where userId in .*", campaignsResult);
启用正则表达式匹配时要注意的主要警告是,查询中需要的任何文字特殊字符(例如
*
,(
和)
文字)都必须先在正则表达式中转义将正常工作。