在spalatest的进步夹具

时间:2015-08-26 16:52:13

标签: scala scalatest

我是新手,所以我希望这不是很明显但是......

到目前为止,我尝试在我认为常见的设计模式中构建测试是不成功的:我正在测试对象的初始化,并且我喜欢这个过程的每一步是一个单独的测试。由于其中一些测试在系统的其他地方有副作用(如启动火花簇),这会干扰其他测试,我不希望每个测试都必须重复先前测试中发生的事情。相反,id喜欢在第一个测试中创建一个对象,在其他测试中保持相同的实例,按顺序执行它们,如果一个失败则停止执行规范。

我知道通常做这样的事情的方法是将初始化和销毁​​代码放入fixture或mixin BeforeAndAfter。这很棒,但在这种情况下,初始化和破坏正是我试图测试的,而且它们是复杂的多步骤过程。

我尝试用夹具做这个,但是scalatest显然想要为每个测试创建一个新的夹具实例。它似乎也不能保证测试将以相同的顺序执行,而不是并行执行。并且,从maven运行,似乎并不能保证一次只能运行一个规范。

当然其他人之前必须处理过类似的问题吗?

编辑:这里有一些示例代码

class MinimalExample extends fixture.FlatSpec {

  case class FixtureParam(var thingy: String)

  def withFixture(test: OneArgTest) = {
    val tester = new FixtureParam(null)
    withFixture(test.toNoArgTest(tester))
  }

  "Creating a minimally reproducible example" should "start with creating a String" in { fixture =>
    val command = "A string"
    fixture.thingy = command
    fixture.thingy shouldBe a [String]
  }

  it should "still be a String in this second test" in { fixture =>
    val command = fixture.thingy
    assert(command != null)
  }
  it should "still be a String we mean it!!!" in { fixture =>
    fixture.thingy shouldBe a [String]
  }
}

我希望所有三项测试都能产生相同的结果。相反,测试1通过。测试2失败,返回null == null。测试3抛出空指针异常。

0 个答案:

没有答案