我們的測(cè)試應(yīng)該盡可能的表達(dá)清晰。不過,我們還想重新使用我們以前的步驟。到目前為止,我們使用過的工具,你可能會(huì)得到很長(zhǎng)的步驟定義。
Scenario: Logged-in user does something cool.
Given I go to the home page
And I click the login button
And I fill in username:floppy password:banana
And I click "Login"
When I finally do something interesting
Then I'm already too bored to care.
在這種情況下,我們可能有一個(gè)測(cè)試用例(可能是幾個(gè)),它實(shí)際上是用來表達(dá)用戶如何與登錄表單交互的。在這里,我們得到了登錄順序的步驟定義。然而,當(dāng)?shù)卿洷韱斡幸饬x時(shí),這些步驟就非常多余。我們真的希望能夠在不重復(fù)我們的步驟定義的情況下定義這樣的東西。
Scenario: Logged-in user does something cool.
Given I am logged in
When I do something interesting
Then The world becomes a better place
Lettuce提供了這樣一種方式,可以用一組助手來匹配每一個(gè)給定的語法術(shù)語-Given,When和Then。你可以像這樣完成以上的工作。
@step('I am logged in')
def is_logged_in(step):
step.given('I go to the home page')
step.given('I click the login button')
# ... and so on.
步驟執(zhí)行塊
有時(shí)甚至直接從特性規(guī)范復(fù)制粘貼,去描述步驟執(zhí)行塊。使用step.behave_as方法,然后用str.format動(dòng)態(tài)填寫參數(shù)。例如,我們可以這樣寫上面的步驟定義:
@step('I am logged in')
def is_logged_in(step):
step.behave_as("""
Given I go to the home page
And I click the login button
And I fill in username:{user} password:{pass}
And I click "Login"
""".format(user='floppy', pass='banana'))
這可以與步驟參數(shù)捕獲相結(jié)合,使表達(dá)更清晰和避免代碼重復(fù)。