您好我正在寻找一种在Spring配置文件中使用JUnit的TemporaryFolder的方法。但我收到以下错误。
Caused by: java.lang.IllegalStateException: the temporary folder has not yet been created
at org.junit.rules.TemporaryFolder.getRoot(TemporaryFolder.java:127)
at org.junit.rules.TemporaryFolder.newFolder(TemporaryFolder.java:92)
at org.junit.rules.TemporaryFolder.newFolder(TemporaryFolder.java:84)
这是我的设置
@Configuration
public static class TestConfig {
@ClassRule
private final static TemporaryFolder tempFolder = new TemporaryFolder ();
@Bean
public TestBean testBean(){
return new TestBean(tempFolder.newFolder();
}
}
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {TestConfig.class})
public SomeTesT{
}
我甚至尝试在静态块中初始化TemporaryFolder,但这也没有用。
答案 0 :(得分:3)
4.10后你不能在JUnit中使用TemporaryFolder
。在版本4.10之前,TemporaryFolder
可以在没有@Rule
注释的情况下使用。在版本4.10中,已进行了更改,只有两种方法强制执行此操作。在4.11版中,TemporaryFolder
中的所有方法都强制执行此规则。
您在代码中拥有的正是:没有@Rule
的TemporaryFolder的使用。在@ClassRule
类中添加@Configuration
这一事实与JUnit无关,JUnit将无法识别您的注释,因为代码不在JUnit测试类中。版本4.11中的更改(意为this one)使TemporaryFolder
中的所有方法都强制使用@Rule
注释。
您有两种选择:
@Configuration
内移动SomeTest
类):@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration()
public class SomeTest {
@ClassRule
public final static TemporaryFolder tempFolder = new TemporaryFolder();
@Autowired
private TestBean testBean;
@Configuration
static class Config {
@Bean
public TestBean testBean() {
try {
return new TestBean(tempFolder.newFolder());
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}
...
}