我正在使用Mockrunner来模拟单元测试中的Sql。以下是我的查询:
"select * from table where userId in (" + userIds + ")"现在,我的userIds是状态依赖的。我不需要我的测试用例依赖于列表- userIds中的安排。所以我不需要精确匹配而是正则匹配。我已经通过以下代码启用regex匹配:
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支持的regex语法。
编辑:我无法将像"Select * from tables"这样的查询与"Select * from tab .*"匹配。所以它必须用我使用regex和Mockrunner的方式来做一些事情
发布于 2015-11-17 06:42:01
有一些有用的例子,可在这里找到。例如:
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);...or可能更简洁(并且取决于您的测试所需的细粒度):
prepareResultSet("select .* from table where userId in .*", campaignsResult);在启用regex匹配时要注意的主要注意事项是,在查询中所需的任何文字特殊字符(如*、(和)文本)都需要在regex中转义才能正常工作。
https://stackoverflow.com/questions/33749986
复制相似问题