2017-05-08 78 views
0

我想创建一个简单的计算器应用程序使用黄瓜/小黄瓜和斯卡拉信息是在数据表中给出但不知道如何去做这件事?我很新的BDD测试,并想知道其他程序员如何克服这一点我已经创建了一个功能文件与其他操作,如加法,减法,乘法和除法,其中的值是在'什么时候提供,然后'语句工作正常,但不知道如何使用Scala处理Cucumber内的数据表。与黄瓜和斯卡拉Datatable测试

任何帮助,将不胜感激

特性文件:

Scenario Outline: Addition 
Given my calculator is running 
When I add <inputOne> and <inputTwo> 
Then result should be equal to <output> 
Examples: 
    | inputOne | inputTwo | output | 
    | 20  | 30  | 50  | 
    | 2  | 5  | 7  | 
    | 0  | 40  | 40  | 

步骤定义文件:

class CalcSteps extends ScalaDsl with EN { 

var calc: MyCalc = _ 
var result: Int= _ 

Given("""^my calculator is running$""") {() => 
calc = new MyCalc 
} 

When("^I add \"(.*?)\" and \"(.*?)\":$") { (firstNum: Int, secondNum: Int, values: DataTable) => 
//not sure what to do here 
//result = calc.add(firstNum, secondNum) 
} 

Then("^result should be equal to \"(.*?)\"$") { (expectedResult: Int) => 
assert(result == expectedResult, "Incorrect result of calculator computation") 

}

MyCalc:

class MyCalc { 

def add(first:Int, second: Int): Int = { 
    first + second 
    } 
} 
+1

你应该使用'场景大纲',这样每个添加都是测试。所以在你的情况下,你将有3个测试。 Datatable用于传递单个测试所需的详细信息。我对Scala一无所知,但由于它基于Java,因此您使用的步骤定义不正确。在Java中,您必须使用DataTable将值作为一种2 dim阵列来获取。您甚至可以使用List或Map来代替。 – Grasshopper

+0

感谢关于情景大纲的提醒。我现在纠正了这个问题。你碰巧有一个在java中使用数据表的例子吗?谢谢 – user610

+1

你不需要数据表代码了...你的原代码应该可以工作。从步骤定义中删除“,values:DataTable”。 – Grasshopper

回答

0

感谢@Grasshopper我能够通过简单地改变特性文件来解决问题:从步骤定义导致现场:

Scenario Outline: Addition 
Given my calculator is running 
When I add <inputOne> and <inputTwo> 
Then result should be equal to <output> 
Examples: 
    | inputOne | inputTwo | output | 
    | 20  | 30  | 50  | 
    | 2  | 5  | 7  | 
    | 0  | 40  | 40  | 

,并去掉“数据表值”

When("^I add \"(.*?)\" and \"(.*?)\":$") { (firstNum: Int, secondNum: Int) => 

result = calc.add(firstNum, secondNum) 
}