java - примеры - регулярные выражения ozon



Как прочитать ресурс текстового файла в тестовом модуле Java? (6)

Вот что я использовал для получения текстовых файлов с текстом. Я использовал ресурсы IOUtils и ресурсы guava.

public static String getString(String path) throws IOException {
    try (InputStream stream = Resources.getResource(path).openStream()) {
        return IOUtils.toString(stream);
    }
}

У меня есть единичный тест, который должен работать с XML-файлом, расположенным в файле src/test/resources/abc.xml . Каков самый простой способ получить содержимое файла в String ?


Вы можете использовать правило Junit для создания этой временной папки для вашего теста:

@Rule public TemporaryFolder temporaryFolder = new TemporaryFolder(); File file = temporaryFolder.newFile(".src/test/resources/abc.xml");


Наконец, я нашел аккуратное решение, благодаря 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 файл src/test/resources/com/example/abc.xml (я использую Maven).

Если вы замените "abc.xml" на, скажем, "/foo/test.xml" , этот ресурс будет загружен: src/test/resources/foo/test.xml

Вы также можете использовать Cactoos :

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());

С помощью 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)

Сначала убедитесь, что 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 "";
    }
}




unit-testing