在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)
传递,但是,我不想这样离开。
答案 0 :(得分:0)
确保@Value("${routing.folder}")
必须正常工作。
设置了setSepaFolder(String folder)
,您可以像sepa.setSepaFolder(your_new_value);
一样修改它。
现在的问题是:为什么在用SepaRoutingUtils
注入后new
(@Autowired
)实例化?请确保在您的测试中,SepaRoutingUtils sepa
字段不为空,否则它是单元测试配置未命中。 (DependencyInjectionTestExecutionListener
无效,因此所有@Value
注释sepa
字段
希望很有帮助!