在我进行的一个和谐测试的某个阶段,我将一个值设置为一个随机数。
这个值传递,稍后我有一些输出。使用一致的“表格”设置“检查”输出,我将输出值与我预期的值进行比较。
我遇到的问题是我想检查上面提到的随机数。当我获取随机数时,我可以将其设置为Concordion可以存储的内容 -
<span c:set="#prefixValue">Bob</span>
嗯,你明白了 - 我用吸气剂取代“鲍勃”作为我的价值。
但是当我尝试使用它时:
<table c:execute="#actual = getValue(#report, #xpath)">
<tr>
<th>Field name</th>
<th c:assertEquals="#actual">Value</th>
<th c:set="#xpath">Xpath</th>
</tr>
<tr>
<td>UnrelatedValue</td>
<td>SomeDeterminateValue</td>
<td>theXpathForThisToCompareTo</td>
</tr>
<tr>
<td>prefix</td>
<td><span c:echo="#prefixValue" /></td>
<td>differentXpathForThisToCompareTo</td>
</tr>
整个shebang停下来,抱怨说
” 在&lt; table&gt;上使用'execute'或'verifyRows'命令时,必须将命令放在元素上。 “
如何在Concordion中的表中使用预定值?
答案 0 :(得分:2)
规格不应该包含随机元素。它们应该包含一个特定的示例或一组示例。而不是使用随机数,硬编码特定值,然后您可以在以后使用它。
要告诉夹具有关硬编码的值,您可以这样做:
<span c:execute="setPrefixValue(#TEXT)">Bob</span>
然后在灯具中:
public void setPrefixValue(String prefixValue) {
// TODO: Whatever system configuration you need to do
}
如果实际上无法在被测系统中设置值,则使用夹具代码在硬编码值和实际随机值之间进行映射。
public String getValue(String report, String xpath) {
String value = report(report).get(xpath);
if (value.equals(knownRandomValue)) {
return hardcodedValue;
}
return value;
}
答案 1 :(得分:0)
要修复,我必须改变我使用的Concordion方法,使其不那么愚蠢。
我写了这个:
@Override
public void verify(CommandCall commandCall, Evaluator evaluator, ResultRecorder resultRecorder) {
Object expected = evaluator.evaluate(commandCall.getChildren().get(0).getExpression());
Object actual = evaluator.evaluate(commandCall.getExpression());
Element element = setupTheGoshDarnElement(commandCall, expected);
if (actual.equals(expected)) {
resultRecorder.record(Result.SUCCESS);
announceSuccess(element);
} else {
resultRecorder.record(Result.FAILURE);
announceFailure(element, expected.toString(), actual);
}
}
private Element setupTheGoshDarnElement(CommandCall commandCall, Object expected) {
Element e = commandCall.getElement();
e.appendText(expected.toString());
return e;
}
private void announceFailure(Element element, String expected, Object actual) {
listeners.announce().failureReported(new AssertFailureEvent(element, expected, actual));
}
private void announceSuccess(Element element) {
listeners.announce().successReported(new AssertSuccessEvent(element));
}
所以做了一个新的“评估者”〜如果你想知道,评估者的其余部分与AssertEqualsCommand相同。
这会整齐地检查元素并进行评估。为什么一致性没有这样做〜它根本不是火箭科学〜超出我的范围!
请注意,我仍然需要在我的问题中使用“扩展表”来使其工作,短格式表在评估内部表达式时有自己的问题。