有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

SpringJava修改属性以执行@Test以获得代码覆盖率

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

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

从XMLTest中分离路由。爪哇:

@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_"));
    }

}

萼片。爪哇:

@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) 个答案

  1. # 1 楼答案

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

    有一个setter setSepaFolder(String folder),您可以像sepa.setSepaFolder(your_new_value);一样简单地修改它

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

    希望是有帮助的