首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >规范和specs2:如何在specs2中实现doBefore{}?

规范和specs2:如何在specs2中实现doBefore{}?
EN

Stack Overflow用户
提问于 2014-04-25 11:57:58
回答 2查看 1.2K关注 0票数 1

我很难把我的scala测试类中的东西从规范“传输”到specs2。我最后一件事就是和doBefore{}和一些"test" in {}有问题。

我的"testing" should { doBefore{}和一些"getting" in {} }给了我这个错误

描述资源路径定位类型

无法为org.specs2.execute.AsResultUnit类型的证据参数找到隐式值

我假设"Unit“是我的项目中的类,但是doBeforein {}都不返回任何东西,所以我不知道发生了什么。

我的doBefore只是用随机值来填充一些类,例如(这个在extends SpecificationWithJUnit with TestUtil with BeforeExample with AfterExample的类中)。

代码语言:javascript
复制
"retrieving and counting users by criteria" should {

    var user1: User = null
    var user2: User = null
    var user3: User = null

    doBefore {
        val params = Map("login" -> "notExist", "roles" -> Seq(someRoles).asJava
        val params2 = Map("login" -> "notExistAnother", "roles" -> Seq(someRoles).asJava
        val params3 = Map("login" -> "notExistAnotherAnother", "roles" -> Seq(someRoles).asJava).asJava
        val users = Seq(params, params2, params3).map( { PopulateUser.insertUserParams(_).asInstanceOf[User] })
        user1 = users(0)
        user2 = users(1)
        user3 = users(2)
    }

我对Scala非常陌生,但我在specs2 doBefore中读到了这一点,但老实说,我不知道该如何在代码中实现这一点。我在读。因此,有人知道我应该如何在我的代码中实现这一点,是什么导致了这一点(我的意思是,不同的beetwen规范和specs2是巨大的,但是我的测试(除了doBefore)几乎没有记录相同的错误)。

EN

回答 2

Stack Overflow用户

发布于 2014-04-25 15:56:48

你的测试什么都没有。方法中的最后一个表达式是该方法的返回值,它必须是specs2可以转换为结果的内容。您返回的最后一个值是do之前的结果,它是Unit,它不能转换为测试****。这是错误的来源。

代码语言:javascript
复制
could not find implicit value for evidence parameter of type org.specs2.execute.AsResult[Unit]

doBefore在您使用时是可以的,但是之后应该会有某种测试。

有关更多信息,请参见http://etorreborre.github.io/specs2/guide/org.specs2.guide.Structure.html#Structure,其中有一节专门介绍了如何在之前使用,以及在之后使用Specs2 Unit和验收测试。

一般来说,你可以从转换到验收测试风格中获得很多好处。

票数 1
EN

Stack Overflow用户

发布于 2014-04-25 21:20:39

specs2中的上下文管理方式与规范中的上下文不同。如果要在一组示例之前执行一个操作,则需要创建一个Step

代码语言:javascript
复制
"retrieving and counting users by criteria" should {

var user1: User = null
var user2: User = null
var user3: User = null

step {
  val params = Map("login" -> "notExist", "roles" -> Seq(someRoles).asJava
  val params2 = Map("login" -> "notExistAnother", "roles" -> Seq(someRoles).asJava
  val params3 = Map("login" -> "notExistAnotherAnother", "roles" -> Seq(someRoles).asJava).asJava
    val users = Seq(params, params2, params3).map( { PopulateUser.insertUserParams(_).asInstanceOf[User] })
  user1 = users(0)
  user2 = users(1)
  user3 = users(2)
}

"first example" >> ...

如果您想在每个示例之前执行一些代码,则需要混合BeforeExample特性并实现before方法。

最后,如果您想避免使用变量并将一些数据传递给每个示例,则可以使用FixtureExample[T]特性:

代码语言:javascript
复制
class MySpec extends Specification with FixtureExample[Data] {
  def fixture[R : AsResult](f: Data => R) = {
    val data: Data = ??? // prepare data
    AsResult(f(data))
  }

  "a group of example" >> {
    "example1" >> { data: Data =>
      ok
    }
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23292468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档