使用 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;
}
我想根据另一项测试(在同一页面上)的结果为 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;
}