Java修改属性以执行代码覆盖的@Test

时间:2018-03-19 15:06:54

标签: java spring testing code-coverage

在Java中执行一些测试当我测试函数从文件夹中获取文件时,我遇到了两个问题,路由放在application.properties

第一个问题是@Test无法识别${routing.folder}的值提取,它不会执行并对代码进行调试,因此我让它评论并直接复制其值。这里的测试和课程:

SepaRoutingFromXMLTest.java:

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {SepaRoutingUtils.class})
public class SepaRoutingFromXMLTest {

    @Autowired
    SepaRoutingUtils sepa;

    @Test
    public void existValidOneFullXMLFileInFolder() throws Exception {
        SepaRoutingUtils sepa = new SepaRoutingUtils(); 
        assertThat(sepa.readSepaXMLFile(), containsString(".xml"));
        assertThat(sepa.readSepaXMLFile(), containsString("SEPAROUTING_V3_FULL_"));
    }

}

SepaRoutingUtils.java:

@Component
public class SepaRoutingUtils {

    // @Value("${routing.folder}")
    // private String SEPA_FOLDER
    private final String SEPA_FOLDER = "../../separouting";

    private File readSepaFolder() {

        File folder = new File(SEPA_FOLDER);
        if(!folder.isDirectory()) {
            throw new FolderAccessDeniedException();
        }

        return folder;
    }

    public String readSepaXMLFile() {

        try {
            return Utils.prepareXMLFile(readSepaFolder(), SepaRoutingFileType.FULL).getName();
        }
        catch (ParseException e) {
            e.printStackTrace();
            throw new NotValidFileException();      
        }

    }

}

函数Utils.prepareXMLFile返回我需要的文件,它验证文件名并且只获取最新的文件。

第二个问题是我无法执行@Test(expected = FolderAccessDeniedException.class)之类的操作,因为该值来自属性,而且无法从@Test进行修改。它总是正确的或总是不正确的。

所以,我不知道如何在例如路线不存在或无法访问时使其失败。我正在考虑更改函数以将文件夹路由作为其属性readSepaFolder(String folderName)传递,但是,我不想这样离开。

1 个答案:

答案 0 :(得分:0)

确保@Value("${routing.folder}")必须正常工作。

设置了setSepaFolder(String folder),您可以像sepa.setSepaFolder(your_new_value);一样修改它。

现在的问题是:为什么在用SepaRoutingUtils注入后new@Autowired)实例化?请确保在您的测试中,SepaRoutingUtils sepa字段不为空,否则它是单元测试配置未命中。 (DependencyInjectionTestExecutionListener无效,因此所有@Value注释sepa字段

希望很有帮助!