我有一些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