2011-04-30 37 views
0

我有一个关于ScalaTest一些问题:移动从Java/Junit4到斯卡拉/ 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”字段可用于套件类? 在Java中,字段将是静态的,所以我可以从所有套件类中引用它。
也许定义一个伴随对象,它包含一个引用?

+0

你想在一个类中测试执行顺序,或者只是定义类本身的执行顺序? – 2011-05-01 02:50:48

+0

其实我想用两个! – trajectory 2011-05-01 11:55:03

回答

3

在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中存在套房类是做一个方便的方法:

import org.scalatest.Suites 

class MySuites extends Suites(
    new MyFirstSuite, 
    new MySecondSuite, 
    new MyThirdSuite, 
    new MyFourthSuite 
) 

然后你运行MySuites,它会在你声明的顺序运行其嵌套套房。