java-具有JUnit临时文件夹的Spring Config
作者:互联网
嗨,我正在寻找一种在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,但这也不起作用.
解决方法:
在4.10之后,不能像在JUnit中那样使用TemporaryFolder.在版本4.10之前,可以使用没有@Rule批注的TemporaryFolder.在版本4.10中进行了更改,只有两种方法可以执行此更改.在版本4.11中,TemporaryFolder中的所有方法都强制执行此规则.
您的代码中正是这样:不使用@Rules的TemporaryFolder.在@Configuration类中添加@ClassRule的事实与JUnit没有任何关系,并且JUnit无法识别您的注释,因为该代码不在JUnit测试类中.版本4.11(即this one)的更改使TemporaryFolder中的所有方法都强制使用@Rule批注.
您有两种选择:
>坚持使用JUnit 4.10并按原样使用您的代码
>使用Junit 4.11,但是您的代码需要更改.这是一种方法(在SomeTest中移动@Configuration类):
@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;
}
}
}
...
}
标签:junit,spring-test,junit4,spring,java 来源: https://codeday.me/bug/20191121/2051962.html