FitNesse:变量赋值和简单算术

问题描述 投票:0回答:2

根据user guide,可以将值分配给变量,然后执行简单的算术。

想象一下我的夹具设计为在页面上获取一个元素,并将数值提取为Double(我现在使用HSAC Slim BrowserTest夹具和我自己的代码来完成此工作)

|script    |numbers extraction                         |
|$testval1=|numeric value of  |element1              | |
|$testval2=|numeric value of  |element2              | |

运行此命令会给我类似的东西:

|script            |numbers extraction                         |
|$testval1<-[20.04]|numeric value of  |element1 ->[€ 20,04]  | |
|$testval2<-[5.1]  |numeric value of  |element2 ->[€ 5,1]    | |

现在说我想将两个双精度数的和与第三个元素的数值进行比较:

|script|numbers extraction                                           |
|check |numeric value of  |element3|{=${ ${testval1} + ${testval2} =}|

无论我在最后一个单元格中使用括号和美元符号的什么组合,我总是得到'无效的表达式'。

  • $ {= $ testval1 + $ testval2 =}无效表达式:$ testval1 + $ testval2
  • {$ {= $ testval1 + $ testval2 =}} {无效的表达式:$ testval1 + $ testval2}
  • $ {= $ {testval1} + $ {testval2} =} [无效的表达式:未定义的变量:testval1 +未定义的变量:testval2]
  • $ {=!-$ testval1-! +!-$ testval2-! =}无效的表达式:$ testval1 + $ testval2
  • $ {=!-$ {testval1}-! +!-$ {testval2}-! =}无效的表达式:$ {testval1} + $ {testval2}

运行最后一行(在testval1和testval2周围没有括号的情况下返回:

|check|numeric value of|element3  ->[€ 25.14]| [25.14] expected [invalid expression: $testval1->[20.04] + $testval2->[5.1]] |
fitnesse acceptance-testing
2个回答
1
投票

很遗憾,您不能做您想要的。分配元素值的变量实际上是SLIM symbols,而不是Wiki级别的变量。如果您在问题中链接到的用户指南页面上向下滚动,则会找到一个名为“变量与SLIM符号之间的差异”的部分:

  • 在执行测试之前,在渲染时评估变量。这样就可以根据页面层次结构和纯粹输入到测试中的其他内容来设置值。
  • 符号仅在执行时存在。它们可以在运行时更改,因此不同于变量,后者不能。

我发现FitNesse / SLIM中的三种类型的变量使人感到困惑,它们的不同用法,语法和可能性引起许多问题。我的理解是:

  1. Markup variables(又名Wiki变量)。例如,使用${myVar}定义的!define。它们在页面渲染时就获得了它们的价值,因此即使在开始测试之前,您也可以在浏览到Wiki页面时看到它们的价值,并且只有在页面的源中才能看到它是一个变量。这些可以在markup expressions中使用,这是您要在问题中尝试的操作。
  2. Scenario参数。例如,在SLIM方案表的第一行中定义的@{myVar}(或@myVar)。这些是场景的``形式参数'',它们根据场景的调用来获取其实际值(即场景的每种用法(来自脚本表,其他场景或决策表中的行定义其值))。在执行测试的第一个动作之前,他们会在测试开始时获得自己的价值。在查看定义变量的方案表时,您会看到该变量。 (当您使用由table template定义的“ hsac-fitnesse-plugin”表类型(包含在hsac-fitnesse-fixtures项目基准中)时,无需在表的第一行中定义变量名,它们会自动找到根据它们在表格中的出现(例如@{myVar})。)
  3. SLIM symbols。例如,$myVar使用$myVar=为其分配值。这些是“运行时变量”,它们在测试执行期间会获得其值,它们是测试套件的全局变量,并且它们的值可能会在测试执行期间被更改。这些是唯一可以从“被测系统”获得的属性中获取其值的变量,并且它们是您在问题表中使用的变量。 它们实际上是SLIM流程中对对象的引用,因此固定装置可能会更改变量所引用对象的内部状态,而此更改不会显示在变量的Wiki表示中(这只是对象的toString()当时的结果最后一次分配的时间)。

P.S。使用hsac-fitnesse-fixtures时,将字符串转换为double不需要自定义固定装置(例如numbers extraction)。您可以只使用库的convert to doublestring fixture方法。


0
投票

您似乎正在使用浏览器测试,这是我接受的HSAC安装吗?请在问题中提及此内容,因为HSAC是FitNesse固定装置。

无论如何,去掉大括号应该可以解决问题。如果使用大括号,则需要一个全局变量,即使用!define var {foo}

实现的变量

[当使用局部定义的变量,例如|$bar=|value of|foo|时,必须在测试中使用不带大括号的变量来调用。

|$bar=|value of|foo|
|enter|$bar|as|inputField|

在此处查找有关HSAC用法的更多信息:https://github.com/fhoeben/hsac-fitnesse-fixtures/wiki/2.-Slim-Fixtures

旁注:然后,还有一些使用@var@{var}的表模板,其中首选使用@{var},因为@{var}将查找列var,并且@var会接受列v或[ C0],如果您恰好实现了这一点。在这里使用大括号可确保使用完整的变量名。

© www.soinside.com 2019 - 2024. All rights reserved.