带有JUnit临时文件夹的Spring Config

时间:2014-07-23 22:31:46

标签: java spring junit junit4 spring-test

您好我正在寻找一种在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,但这也没有用。

1 个答案:

答案 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注释。

您有两种选择:

  1. 坚持使用JUnit 4.10并按原样使用您的代码
  2. 使用Junit 4.11,但您的代码需要更改。这是一种方法(在@Configuration内移动SomeTest类):
  3. @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;
                }
            }
        }
        ...
    }