编程语言
首页 > 编程语言> > java-具有JUnit临时文件夹的Spring Config

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