diff --git a/todolist/core/src/main/java/todolist/json/TodoPersistence.java b/todolist/core/src/main/java/todolist/json/TodoPersistence.java
index 84cdc50626e69075b9b421baf7c3b460bb2d4e89..cc723151f973f1945a08b99bc3c15898484166db 100644
--- a/todolist/core/src/main/java/todolist/json/TodoPersistence.java
+++ b/todolist/core/src/main/java/todolist/json/TodoPersistence.java
@@ -48,6 +48,10 @@ public class TodoPersistence {
     this.saveFilePath = Paths.get(System.getProperty("user.home"), saveFile);
   }
 
+  public Path getSaveFilePath() {
+    return this.saveFilePath;
+  }
+
   /**
    * Loads a TodoModel from the saved file (saveFilePath) in the user.home folder.
    *
diff --git a/todolist/core/src/test/java/todolist/json/TodoPersistenceTest.java b/todolist/core/src/test/java/todolist/json/TodoPersistenceTest.java
index 28f87338486252c5f2898f784f4164bace66d090..6aa3090f07f8d103025d246e44a9b6bfb943b185 100644
--- a/todolist/core/src/test/java/todolist/json/TodoPersistenceTest.java
+++ b/todolist/core/src/test/java/todolist/json/TodoPersistenceTest.java
@@ -7,6 +7,8 @@ import static org.junit.jupiter.api.Assertions.fail;
 import java.io.IOException;
 import java.io.StringReader;
 import java.io.StringWriter;
+import java.nio.file.Files;
+import java.nio.file.Path;
 import java.time.LocalDateTime;
 import java.util.Iterator;
 import org.junit.jupiter.api.Test;
@@ -20,8 +22,7 @@ public class TodoPersistenceTest {
 
   private TodoPersistence todoPersistence = new TodoPersistence();
 
-  @Test
-  public void testSerializersDeserializers() {
+  private TodoModel createSampleTodoModel() {
     TodoModel model = new TodoModel();
     TodoList list = new TodoList("todo");
     model.addTodoList(list);
@@ -34,22 +35,61 @@ public class TodoPersistenceTest {
     item2.setDeadline(LocalDateTime.parse("2020-10-01T14:53:11"));
     list.addTodoItem(item2);
     model.getSettings().setTodoItemsSortOrder(TodoItemsSortOrder.CHECKED_UNCHECKED);
+    return model;
+  }
+
+  private void checkSampleTodoModel(TodoModel model1, TodoModel model2) {
+      Iterator<AbstractTodoList> it1 = model1.iterator();
+      Iterator<AbstractTodoList> it2 = model2.iterator();
+      assertTrue(it1.hasNext());
+      assertTrue(it2.hasNext());
+      AbstractTodoList list1 = model1.iterator().next();
+      AbstractTodoList list2 = model2.iterator().next();
+      assertEquals(list1.getName(), list2.getName());
+      Iterator<TodoItem> itemIt1 = list1.iterator();
+      Iterator<TodoItem> itemIt2 = list2.iterator();
+      assertTrue(itemIt1.hasNext());
+      assertTrue(itemIt2.hasNext());
+      TodoModuleTest.checkTodoItem(itemIt2.next(), itemIt1.next());
+      assertTrue(itemIt1.hasNext());
+      assertTrue(itemIt2.hasNext());
+      TodoModuleTest.checkTodoItem(itemIt2.next(), itemIt1.next());
+      assertFalse(itemIt1.hasNext());
+      assertFalse(itemIt2.hasNext());
+  }
+
+  @Test
+  public void testSerializersDeserializers_usingStringWriter() {
+    TodoModel model = createSampleTodoModel();
     try {
       StringWriter writer = new StringWriter();
       todoPersistence.writeTodoModel(model, writer);
       String json = writer.toString();
       TodoModel model2 = todoPersistence.readTodoModel(new StringReader(json));
-      assertTrue(model2.iterator().hasNext());
-      AbstractTodoList list2 = model.iterator().next();
-      assertEquals("todo", list.getName());
-      Iterator<TodoItem> it = list2.iterator();
-      assertTrue(it.hasNext());
-      TodoModuleTest.checkTodoItem(it.next(), item1);
-      assertTrue(it.hasNext());
-      TodoModuleTest.checkTodoItem(it.next(), item2);
-      assertFalse(it.hasNext());
+      checkSampleTodoModel(model, model2);
+    } catch (IOException e) {
+      fail(e.getMessage());
+    }
+  }
+
+  @Test
+  public void testSerializersDeserializers_usingSaveFile() {
+    TodoModel model = createSampleTodoModel();
+    // set unique save file path
+    todoPersistence.setSaveFile("todo-" + System.currentTimeMillis() + ".json");
+    Path saveFilePath = todoPersistence.getSaveFilePath();
+    try {
+      todoPersistence.saveTodoModel(model);
+      assertTrue(Files.exists(saveFilePath));
+      TodoModel model2 = todoPersistence.loadTodoModel();
+      checkSampleTodoModel(model, model2);
     } catch (IOException e) {
       fail(e.getMessage());
+    } finally {
+      try {
+        Files.deleteIfExists(saveFilePath);
+      } catch (IOException e) {
+      }
     }
   }
-}
\ No newline at end of file
+}