我是新手,所以我希望这不是很明显但是......
到目前为止,我尝试在我认为常见的设计模式中构建测试是不成功的:我正在测试对象的初始化,并且我喜欢这个过程的每一步是一个单独的测试。由于其中一些测试在系统的其他地方有副作用(如启动火花簇),这会干扰其他测试,我不希望每个测试都必须重复先前测试中发生的事情。相反,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抛出空指针异常。