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 楼答案
确保
@Value("${routing.folder}")
必须正常工作有一个setter
setSepaFolder(String folder)
,您可以像sepa.setSepaFolder(your_new_value);
一样简单地修改它现在的问题是:为什么在注射了
@Autowired
之后要用new
实例化SepaRoutingUtils
?请确保在测试中,SepaRoutingUtils sepa
字段不为空,否则它是单元测试配置未命中。(由于DependencyInjectionTestExecutionListener
无效,因此所有@Value
注释的sepa
字段都无效)希望是有帮助的