使用Fitnesse符号将baseUrl注入RestFixture

时间:2016-11-15 17:07:51

标签: fitnesse restfixture

我想根据另一个测试的结果(在同一页面上)为表设置baseUrl。 我尝试按照Fitnesse的文档(和其他资源)的这些页面: smartrics blog postfitnesse 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|

但这些都不起作用。 我知道emailLink符号不是null,因为我在另一个表中测试它,但我似乎无法将它注入到RestFixture中。 我总是得到一个IllegalArgumentException,表明符号名称尚未根据其值进行解析,例如: java.lang.IllegalArgumentException: Malformed base URL: $emailLink

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

你在使用苗条吗?

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

我已经用Slim这样的方式使用了一些符号,但没有特别使用REST Fixture。

答案 1 :(得分:0)

通过查看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;
}