/// <summary> /// Общий метод ля тестирования конструктора, который восстанавливает данные контроллера из файла с использованием различных форматтеров. /// </summary> /// <param name="formatter">Форматтер файла, с помощью которого будет сохранено, а затем восстановлено состояние контроллера пользователя.</param> public void UserDataControllerTest() { int NumberOfRetries = 3; int DelayOnRetry = 1000; // Выбираем директорию для временных файлов. Если ее нет, то создаем. DirectoryInfo directory = new DirectoryInfo(Path.Combine(Environment.CurrentDirectory, "Tests")); if (!directory.Exists) { directory.Create(); } else { // Если скопилось больше 10 файлов от предыдущих тестов, удаляем их. FileInfo[] files = directory.GetFiles(); if (files.Length > 10) { foreach (FileInfo file in files) { file.Delete(); } } } //Создаем нового пользователя и помещаем его в контроллер User user = new User("Ivan", "Ivanov", "Ivanovich"); UserDataController userDataController = new UserDataController(user); // Сохраняем контроллер. userDataController.SaveData(); // Созадем еще 1 контроллер и загружаем в него информацию из только что сохраненного файла. UserDataController userDataController1 = null; //Делаем 3 попытки с задержкой 1000 мс, на случай проблем/задержек в механизме ввода-вывода. for (int i = 1; i <= NumberOfRetries; i++) { try { userDataController1 = new UserDataController(); } catch (IOException) when(i <= NumberOfRetries) { Thread.Sleep(DelayOnRetry); } } // Строковые представления объектов равны, т.е. объекты имеют одинаковое состояние Assert.AreEqual(userDataController.GetCurrentElement().ToString(), userDataController1.GetCurrentElement().ToString()); // При этом ссылки указывают на разные области памяти, т.е. это не один и тот же объект. Assert.AreNotEqual(userDataController, userDataController1); }