2015-05-28 2 views
1

Есть ли способ предпринять определенные действия, если мой тест не прошел? У меня есть тест, который использует селен/fluentlinium для заполнения текстов/кнопок и подтверждения результатов. Я хотел бы иметь возможность предпринимать действия всякий раз, когда условие теста терпит неудачу. Что-то вроде следующегоspecs2- Принять меры при неудаче теста

class TestSpecial extends Specification{ 
    "Website should" { 
    "do the right thing" in new WithBrowser(webDriver = WebDriverFactory(FIREFOX)){ 
     browser.$(".xyz1").text("a") 
     browser.$(".xyz2").click() 
     browser.$(".xyz3").getText must equalTo("foo") 

     browser.$(".xyz1").text("b") 
     browser.$(".xyz2").click() 
     browser.$(".xyz3").getText must equalTo("bar") 
    } 
    onFailure 
    { 
     //context remains same, so I can use browser 
     MySnapshotFunction.takeSnapshot(browser) 
    } 
    } 
} 

Есть ли способ, чтобы сделать тест бросок на провал, так что я могу взять снимок в блоке поймать?

Я думаю, что один из способов заключается в использовании предложения, приведенные в:

How to do setup/teardown in specs2 when using "in new WithApplication"

Создать свой собственный «WithBrowser» пользовательской реализации, который отмечает каждый тест, как выход из строя до начала и требует от пользователя этой реализации, чтобы отметить тест, прошедший в конце тестового блока. В пользовательской реализации кода разрыва берет снимок. Я постарался использовать этот подход, но приветствовал бы любые более простые/более простые решения для этого.

ответ

2

Вы должны быть в состоянии использовать Around особенности:

import org.specs2.mutable._ 
import org.specs2.execute._ 

trait TakeSnapshot extends org.specs2.mutable.Around { 
    def browser: Browser 

    abstract override def around[R : AsResult](r: =>R) = super.around { 
    val result = AsResult(r) 
    if (!result.isSuccess) { 
     takeSnapshot(browser) 
    } 
    result 
    } 

    def takeSnapshot(browser: Browser) = 
    println("take snapshot") 
    } 
} 

// then 
"do the right thing" in 
    new WithBrowser(webDriver=WebDriverFactory(FIREFOX)) with TakeSnapshot { 
    browser.$(".xyz1").text("a") 
    browser.$(".xyz2").click() 
    browser.$(".xyz3").getText must equalTo("foo") 

    browser.$(".xyz1").text("b") 
    browser.$(".xyz2").click() 
    browser.$(".xyz3").getText must equalTo("bar") 
} 

Когда я исполню ее на неисправный примере я получаю след, как

execute t  // comes from a println in WithBrowser 
take snapshot 
quit browser // comes from a println in Browser 
Смежные вопросы