2016-03-09 2 views
-1

У меня есть следующий метод сохранения, но я не знаю, как проверить правильность работы метода. Как я могу проверить его в тестовом классе?Java: Как я могу проверить метод сохранения?

static void saveFile(List<String> contents, String path){ 

    File file = new File(path); 
    PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file))); 

    for(String data : contents){ 
     pw.println(data); 
    } 
} 

К сожалению, содержимое не является строкой, а списком. Но нет ли необходимости создавать тестовый класс? потому что он построен методом проверенных Java.

+0

создать другой метод loadFile и прочитать записанные данные и проверить, что содержимое в обеих ситуациях одинаково. – Pooya

+3

Почему вы хотели бы тестировать классы Java Standard? В вашем методе нет логики, которую вы должны проверить. – Jens

+0

Вы не закрываете PrintWriter в своем методе, поэтому он не будет полностью записывать все строки в файл. Кроме того, вы понимаете, что уже существует стандартный метод 'Files.write', который делает то же самое, не так ли? –

ответ

1

Удалить FileWriter от вас способа, как этого

static void saveFile(List<String> contents, Writer writer){ 
    PrintWriter pw = new PrintWriter(new BufferedWriter(writer)); 

    for(String data : contents){ 
     pw.println(data); 
    } 

    pw.flush(); 
} 

В вашем JUnit тесте использовании метода StringWriter для проверки вашей экономии логики

@Test 
void testWriter() { 
    StringWriter writer = new StringWriter(); 
    saveFile(Arrays.asList("test content", "test content2"), writer); 
    assertEquals("test content\ntest content2\n", writer.toString()); 
} 

и в вашем реальном коде

... 
Writer writer = new FileWriter(new File(path)); 
saveFile(Arrays.asList("real content", "real content2"), writer); 
... 
+2

и как он проверяет правильность функции? – Pooya

+0

@Pooya см. Мой ответ update –

+2

writer.toString() не вернет письменное содержание – Pooya

1

Для тестирования, вы можете рассмотреть тестовую структуру, такую ​​как s jUnit и напишите свой тестовый пример. В вашем конкретном случае, вы могли бы написать что-то выглядит следующим образом:

public class TestCase { 

    @Test 
    public void test() throws IOException { 
     String contents = "the your content"; 
     String path = "the your path"; 

     // call teh metod 
     saveFile(contents, path); 

     // tacke a reference to the file 
     File file = new File(path); 

     // I assert that the file is not empty 
     Assert.assertTrue(file.length() > 0); 

     // I assert that the file content is the same of the contents variable 
     Assert.assertSame(Files.readLines(file, Charset.defaultCharset()).stream().reduce("", (s , s2) -> s+s2),contents); 
    } 


    static void saveFile(String contents, String path) throws IOException { 

     File file = new File(path); 
     PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter(file))); 

     pw.println(contents); 
    } 
} 

Таким образом, у вас есть рамки, чтобы проверить, если ваш код работает, как вы ожидаете. Если этого недостаточно, вы должны изучить макетную структуру, такую ​​как Mockito.

+0

Вам не нужно тестировать реальную запись файла, а логику написания. –

+0

Я согласен с вами, Андрей, мой ответ был как техническая поддержка, другими словами, если вы хотите выполнить тестовый пример по методу, так как в вопросе может быть хороший выбор, выберите тестовую структуру и в моем answare покажите способ использования jUnit api. Просто это. –

Смежные вопросы