шаблоны wpf и tdd - PullRequest
       5

шаблоны wpf и tdd

1 голос
/ 06 июля 2011

Я изучаю wpf.Я пытаюсь использовать tdd практики с wpf.У меня есть следующий код в одной из моих моделей представления, которая сохраняет данные из элемента управления в файл XML -

void saveStr()
        {
            string source = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + @"\Data\Connections.xml";

            DataGrid dg = FindChildViewItems.FindChild<DataGrid>(Application.Current.MainWindow, "MyDataGrid");
            List<XmlSettings> list = new List<XmlSettings>();

            foreach (var i in dg.Items)
            {
                if(i.GetType().ToString() == "MyProject.Configuration.XmlSettings")
                {
                    list.Add((XmlSettings)i);
                }
            }

            saveXml.Save(source, list);   
        }

FindChildViewItems просто использует объекты visualtreehelper и dependency для поиска дочерних элементов из представления (адаптированных изpost here ).

Мой вопрос заключается в том, придерживается ли он шаблонов tdd, поскольку он зависит от представления, когда я оглядываюсь назад, чтобы получить содержимое этого конкретного элемента управления.

Есть ли другой способ получить информацию из таблицы данных в представлении, чтобы содержащиеся данные могли быть сохранены в XML-файле.Я надеюсь, что это имеет смысл ......

Спасибо за любые мысли.

Ответы [ 2 ]

1 голос
/ 06 июля 2011

Ну, похоже, вы нарушаете несколько паттернов здесь. Это определенно будет очень сложно проверить.

Возможно, я смогу помочь вам немного сгладить вашу структуру, чтобы сделать ее более тестируемой.

Во-первых, ваша модель представления не должна сохранять состояние в файл! Ваша модель представления должна обновлять модель всякий раз, когда пользователь изменяет данные в одном из наборов данных, и ничего больше . Используйте двустороннюю привязку данных, чтобы позволить вашей модели представления знать, когда изменяется представление.

Сохранение состояния в файле должно выполняться в другой части программы, возможно, отдельным объектом команды, возможно в событии (много раз , где это должно происходить, зависит от структуры вашей программы, и Я могу только догадываться об этом). Независимо от того, где это происходит, она должна находиться за пределами вашей модели представления и вашей модели, и она должна использовать вашу модель для получения данных, которые она записывает в файл.

После некоторых незначительных изменений в вашем методе это должно быть полностью проверено. Дайте ему объект-заглушку модели (предпочтительно класс, который имеет только настройки пользовательской конфигурации) и отправьте его в город со своими поддельными данными.

Проверка написания файла становится вашей самой большой проблемой. Сложно автоматизировать.

Но проверяемый.

0 голосов
/ 06 июля 2011

В идеале, если вы хотите сделать правильный TDD (Test Driven Development), вы должны попытаться использовать MVVM Design Pattern.Он отделяет View от ViewModel, что позволяет легко тестировать ViewModel и Model.

если вы использовали MVVM в вышеприведенном примере, ваша Модель будет иметь метод save (), а затем вы будете вызывать его из ВМ.Таким образом, вы можете легко протестировать свою модель, чтобы сэкономить.

И позже вы также можете протестировать свою виртуальную машину, чтобы убедиться, что при вызове SaveCommand она вызывает метод вашей модели.дайте мне знать, если вам нужна дополнительная информация (Google для MVVM, если вы не слышали об этом раньше)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...