0

我正在使用 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"with之类的查询"Select * from tab .*"。所以它必须与我在 Mockrunner 中使用正则表达式的方式有关

4

1 回答 1

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 正则表达式语法。在这种情况下,您可能想要:

prepareResultSet("select \\* from table where userId in \\(.*\\)", campaignsResult);

...或者更简洁(并且取决于您的测试需要多么细粒度):

prepareResultSet("select .* from table where userId in .*", campaignsResult);

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

于 2015-11-17T06:42:01.703 回答