使用 Fitnesse 符号将 baseUrl 注入 RestFixture

Use Fitnesse symbol to inject baseUrl into RestFixture

我想根据另一项测试(在同一页面上)的结果为 table 设置 baseUrl。 我尝试关注 Fitnesse 文档(和其他资源)的这些页面: smartrics blog post, fitnesse symbols page, 但我似乎无法让它工作。 到目前为止,我已经尝试使用以下语法:

| Fit Rest Fixture | %emailLink% | | GET | / | 200 |Content-Type: text/plain|Email Verified|

| Fit Rest Fixture | emailLink= | | GET | / | 200 |Content-Type: text/plain|Email Verified|

| Fit Rest Fixture | $emailLink | | GET | / | 200 |Content-Type: text/plain|Email Verified|

但其中 none 有效。 我知道 emailLink 符号不为空,因为我正在另一个 table 中测试它,但我似乎无法将它注入 RestFixture。 我总是得到一个 IllegalArgumentException 指示符号名称尚未根据其值解析,例如 java.lang.IllegalArgumentException: Malformed base URL: $emailLink

如有任何帮助,我们将不胜感激。

你在用slim吗?

http://www.fitnesse.org/FitNesse.UserGuide.WritingAcceptanceTests.SliM.SymbolsInTables

我在 Slim 中以这种方式使用过几次符号,但不是专门用于 REST Fixture。

通过查看 FitRestFixture 的代码并修改它,我想出了一些对我有用的东西。 似乎我正在寻找的功能不支持开箱即用,但可以通过简单的 mod 轻松实现(尽管这种方式不是最干净的),例如:

/**
 * @return Process args ({@link fit.Fixture}) for Fit runner to extract the
 * baseUrl of each Rest request, first parameter of each RestFixture
 * table.
 */
protected String getBaseUrlFromArgs() {
    String arg = null;
    if (args.length > 0) {
        arg = args[0];
        /* mod starts here */
        if (isSymbol(arg)) {
            String symbolName = stripSymbolNotation(arg);
            arg = resolveSymbol(symbolName);
        }
        /* mod ends here */
    }
    return arg;
}

private boolean isSymbol(String arg) {
    // notice that I've used the '<<' notation convention to extract the 
    // the value from a symbol, while in RestFixture the conventional 
    // notation is %symbolName%
    return null != arg && arg.startsWith("<<");
}

private String stripSymbolNotation(String arg) {
    return arg.substring(2);
}

private String resolveSymbol(String arg) {
    String symbolValue = (String) Fixture.getSymbol(arg);
    LOG.warn(String.format("resolved symbol %s to value %s", arg, symbolValue));
    return symbolValue;
}