我有一些JUnit測試使用TemporaryFolder
@Rule
。他們使用TemporaryFolder
在@Before
方法來執行一些設置:JUnit @Rule與@Before的生命週期交互
@Rule
public TemporaryFolder folder = new TemporaryFolder();
@Before
public void init() {
folder.newFile("my-file.txt");
}
@Test
public void myTest() { ... }
這其中大部分作品完美的時間。但是,在使用SpringJUnit4ClassRunner
時,我發現在某些情況下,在應用我的TemporaryFolder
實例內的Statement
之前將調用init()
方法。因此,在init()
內使用folder
時,臨時文件夾位置未設置(例如:null
),而我的文件最終在工作目錄中,而不是在/tmp
中。
因此,在某些情況下,@Before
方法是在規則之前執行的,但是我無法建立確定的模式。我偶爾會看到一些與我自己的規則實現類似的問題。
是否有任何方法可以確保我的規則語句在任何設置方法之前應用?
不錯,找到@pholser。我使用的是JUnit 4.8.x,它似乎按照4.10的順序構建鏈。然而,methodBlock()在SpringJUnit4ClassRunner中被覆蓋,並設置了與JUnit 4.7相似的順序。 – teabot