Mockrunner(Java) 使用正则表达式查询

Mockrunner(Java) query with Regex

我正在使用 Mockrunner 为我的单元测试模拟 Sql 数据库。以下是我的查询:-

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

现在我的用户 ID 取决于状态。我不需要我的测试用例依赖于列表中的排列 - 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);

启用正则表达式匹配时要注意的主要注意事项是您希望在查询中使用的任何文字特殊字符(例如 *()文字)需要在正则表达式中转义才能正常工作。