Concordion - 如何将值设置为表格?

时间:2014-02-06 18:26:04

标签: concordion

在我进行的一个和谐测试的某个阶段,我将一个值设置为一个随机数。

这个值传递,稍后我有一些输出。使用一致的“表格”设置“检查”输出,我将输出值与我预期的值进行比较。

我遇到的问题是我想检查上面提到的随机数。当我获取随机数时,我可以将其设置为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中的表中使用预定值?

2 个答案:

答案 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会让我变得僵硬。

要修复,我必须改变我使用的Concordion方法,使其不那么愚蠢。

遵循这里的一般想法: http://automatingsoftwaretesting.wordpress.com/2011/05/27/write-your-own-concordion-command-an-example-for-asserting/

我写了这个:

@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相同。

这会整齐地检查元素并进行评估。为什么一致性没有这样做〜它根本不是火箭科学〜超出我的范围!

请注意,我仍然需要在我的问题中使用“扩展表”来使其工作,短格式表在评估内部表达式时有自己的问题。