我有一些关于ScalaTest的问题:
我如何确保ScalaTest的测试执行顺序,我可以继续使用Junit4的@Suite.SuiteClasses注解吗?或者有没有其他方法根本不使用Junit?
@RunWith(Suite.class)
@Suite.SuiteClasses({
FirstTest.class, SecondTest.class
})
public class MyTestSuite {
@BeforeClass
public void setup() {
public MyDB db = new DB("config");
}
}
我能不能把上面的代码翻译成Scala,然后就可以使用了?
另一个问题是:
如何使"db“字段对Suite-Classes可用?在Java中,这个字段是静态的,所以我可以从所有Suite类中引用它。
也许可以定义一个包含引用的伴生对象?
发布于 2011-05-01 13:57:58
在ScalaTest中,一个套件可以包含零到多个测试,也可以包含零到多个嵌套套件。套件的嵌套套件由其nestedSuites方法提供,要运行的测试的名称由其testNames方法提供。一般的答案是,对于任何内置的ScalaTest风格特征,嵌套套件和测试执行的顺序由它们在nestedSuites和testNames的返回值中出现的顺序决定。因此,如果你没有得到你想要的顺序,那么你可以覆盖这两个方法中的一个或两个。
然而,对于测试顺序,简单地使用其中一个测试是函数的特征可能要容易得多,因为这些特征按照它们在源代码中出现的顺序运行测试。(相比之下,套件按测试名称的字母顺序运行测试。)因此,我建议您使用FunSuite作为初学者。例如:
import org.scalatest.FunSuite
class MySuite extends FunSuite {
test("this one will run first because it appears first") {
// ...
}
test("this one will run second because it appears second") {
// ...
}
test("this one will run third, and so on") {
// ...
}
}
至于让套件按顺序运行,这是很少见的,因为人们喜欢在编写新套件时使用发现来发现它们。但要做到这一点,方法是覆盖nestedSuites。在1.5版本中,Suites类提供了一种方便的方式来实现这一点:
import org.scalatest.Suites
class MySuites extends Suites(
new MyFirstSuite,
new MySecondSuite,
new MyThirdSuite,
new MyFourthSuite
)
然后运行MySuites,它将按照您声明的顺序运行其嵌套套件。
https://stackoverflow.com/questions/5842348
复制