Java 유닛 테스트에 텍스트 파일 리소스를 읽는 방법은 무엇입니까?
XML 파일을 사용하기 위한 유닛테스트가 있습니다.src/test/resources/abc.xml
파일 내용을 가져오는 가장 쉬운 방법은 무엇입니까?String
?
마침내 Apache Commons 덕분에 멋진 해결책을 찾았습니다.
package com.example;
import org.apache.commons.io.IOUtils;
public class FooTest {
@Test
public void shouldWork() throws Exception {
String xml = IOUtils.toString(
this.getClass().getResourceAsStream("abc.xml"),
"UTF-8"
);
}
}
완벽하게 동작합니다.파일src/test/resources/com/example/abc.xml
로드되었습니다(Maven 사용 중).
치환하는 경우"abc.xml"
예를 들어,"/foo/test.xml"
이 리소스가 로드됩니다.src/test/resources/foo/test.xml
선인장을 사용할 수도 있습니다.
package com.example;
import org.cactoos.io.ResourceOf;
import org.cactoos.io.TextOf;
public class FooTest {
@Test
public void shouldWork() throws Exception {
String xml = new TextOf(
new ResourceOf("/com/example/abc.xml") // absolute path always!
).asString();
}
}
바로 요점:
ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("file/test.xml").getFile());
파일에 UTF8 인코딩이 있다고 가정합니다.그렇지 않은 경우 UTF8 인수는 생략하고 각각의 경우 기본 운영체제에 기본 문자 집합을 사용합니다.
JSE 6의 빠른 방법 - 심플하고 서드파티제 라이브러리는 없습니다.
import java.io.File;
public class FooTest {
@Test public void readXMLToString() throws Exception {
java.net.URL url = MyClass.class.getResource("test/resources/abc.xml");
//Z means: "The end of the input but for the final terminator, if any"
String xml = new java.util.Scanner(new File(url.toURI()),"UTF8").useDelimiter("\\Z").next();
}
}
JSE 7의 빠른 방법
public class FooTest {
@Test public void readXMLToString() throws Exception {
java.net.URL url = MyClass.class.getResource("test/resources/abc.xml");
java.nio.file.Path resPath = java.nio.file.Paths.get(url.toURI());
String xml = new String(java.nio.file.Files.readAllBytes(resPath), "UTF8");
}
Java 9 이후 빠른 방법
new String(getClass().getClassLoader().getResourceAsStream(resourceName).readAllBytes());
그러나 둘 다 대용량 파일을 의도한 것은 아닙니다.
우선, 을 확인합니다.abc.xml
출력 디렉토리에 카피되고 있습니다.그럼, 을 사용해 주세요.getResourceAsStream()
:
InputStream inputStream =
Thread.currentThread().getContextClassLoader().getResourceAsStream("test/resources/abc.xml");
InputStream이 있으면 문자열로 변환하기만 하면 됩니다.이 리소스는 http://www.kodejava.org/examples/266.html을 참조하십시오.단, 관련 코드를 발췌합니다.
public String convertStreamToString(InputStream is) throws IOException {
if (is != null) {
Writer writer = new StringWriter();
char[] buffer = new char[1024];
try {
Reader reader = new BufferedReader(
new InputStreamReader(is, "UTF-8"));
int n;
while ((n = reader.read(buffer)) != -1) {
writer.write(buffer, 0, n);
}
} finally {
is.close();
}
return writer.toString();
} else {
return "";
}
}
Google Guava 사용 시:
import com.google.common.base.Charsets;
import com.google.common.io.Resources;
public String readResource(final String fileName, Charset charset) throws Exception {
try {
return Resources.toString(Resources.getResource(fileName), charset);
} catch (IOException e) {
throw new IllegalArgumentException(e);
}
}
예:
String fixture = this.readResource("filename.txt", Charsets.UTF_8)
다음을 시도해 볼 수 있습니다.
String myResource = IOUtils.toString(this.getClass().getResourceAsStream("yourfile.xml")).replace("\n","");
이게 텍스트 파일을 받을 때 쓰던 거예요나는 공통의 차용증과 구아바의 자원을 사용했다.
public static String getString(String path) throws IOException {
try (InputStream stream = Resources.getResource(path).openStream()) {
return IOUtils.toString(stream);
}
}
Junit 규칙을 사용하여 테스트용 임시 폴더를 만들 수 있습니다.
@Rule public TemporaryFolder temporaryFolder = new TemporaryFolder();
File file = temporaryFolder.newFile(".src/test/resources/abc.xml");
JAVA 8의 경우 디버깅을 많이 한 후 두 가지 사이에 차이가 있다는 것을 알게 되었습니다.
URL tenantPathURI = getClass().getResource("/test_directory/test_file.zip");
그리고.
URL tenantPathURI = getClass().getResource("test_directory/test_file.zip");
네, 그./
그게 없는 길의 시작에서 나는 그것을 얻고 있었다.null
!
및 그test_directory
아래에 있습니다.test
디렉토리로 이동합니다.
언급URL : https://stackoverflow.com/questions/3891375/how-to-read-a-text-file-resource-into-java-unit-test
'source' 카테고리의 다른 글
Vuex에서 vue 인스턴스에 액세스하는 방법 (0) | 2022.09.01 |
---|---|
Vuex의 setimeout 기능 내 상태를 변경 및 커밋할 수 있습니까? (0) | 2022.09.01 |
Java 8 Streams: 여러 필터와 복잡한 조건 비교 (0) | 2022.09.01 |
TypeError: 정의되지 않은 속성 'get'을 읽을 수 없습니다(Vue-resource 및 Nuxt). (0) | 2022.09.01 |
잘못된 소품: 소품에 대한 형식 검사에 실패했습니다. (0) | 2022.09.01 |