specs2-对测试失败采取行动

时间:2015-05-28 12:56:17

标签: specs2

如果我的测试失败,有没有办法采取某种行动? 我有一个测试,使用selenium / fluentlinium填充文本/单击按钮并断言结果。我希望能够在测试条件失败时采取行动。类似于以下内容

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 )
    }
  }
}

有没有办法让测试失败,以便我可以在catch块中创建快照?

我认为一种方法是使用以下建议:

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

创建我自己的'WithBrowser'自定义实现,在启动之前将每个测试标记为失败,并要求该实现的用户将测试标记为在测试块结束时传递。拆解代码中的自定义实现会拍摄快照。我已经开始尝试使用这种方法,但欢迎任何更好/更简单的解决方案。

1 个答案:

答案 0 :(得分:2)

您应该能够使用android:src="@drawable.. android:background="@drawable... 特征:

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" )  
}