Курс. NETХорошая книга Чакон Pro git. Хорошая книга

Скачать презентацию Курс. NETХорошая книга Чакон Pro git. Хорошая книга Скачать презентацию Курс. NETХорошая книга Чакон Pro git. Хорошая книга

all_2013_07_09.ppt

  • Количество слайдов: 30

>Курс .NET Курс .NET

>Хорошая книга Чакон Pro git Хорошая книга Чакон Pro git

>Хорошая книга Адам Фриман про ASP.NET MVC 4 Хорошая книга Адам Фриман про ASP.NET MVC 4

>Орг. вопросы Включить камеру Отметить присутствующих След. Занятие – 12 июля (пятница) Орг. вопросы Включить камеру Отметить присутствующих След. Занятие – 12 июля (пятница)

>Дом. задание Восстановить CVS loader Дом. задание Восстановить CVS loader

>TDD Проблемы TDD Проблемы

>Одна из проблем TDD Подготавливаем данные для теста («эталонные данные») Запускаем тест Видим ошибку Одна из проблем TDD Подготавливаем данные для теста («эталонные данные») Запускаем тест Видим ошибку или не ошибку Подготаваливаем данные для теста – что за этим кроется???????

>Вариант 1 (не прикольный) using (var db = new cvs_dbEntities()) { var newRecord = Вариант 1 (не прикольный) using (var db = new cvs_dbEntities()) { var newRecord = new testtable {id = 1, name = "3", value = true}; db.testtables.AddObject(newRecord); var newRecord2 = new testtable { id = 2, name = "3", value = true }; db.testtables.AddObject(newRecord2); var newRecord3 = new testtable { id = 3, name = "3", value = true }; db.testtables.AddObject(newRecord3); var newRecord4 = new testtable { id = 4, name = "3", value = true }; db.testtables.AddObject(newRecord4); db.SaveChanges(); }

>Вариант 1 (сказка на ночь) А если у таблицы 16 полей и надо добавить Вариант 1 (сказка на ночь) А если у таблицы 16 полей и надо добавить 10 записей?

>Вариант 2 (прикольный) Взять open office или office Вариант 2 (прикольный) Взять open office или office

>Проблема Как это сделать? Проблема Как это сделать?

>Решение (часть 1) Использовать csv формат (когда все разделяется запятыми, а сами запятые в Решение (часть 1) Использовать csv формат (когда все разделяется запятыми, а сами запятые в тексте экранируются)

>Решение (2) Сделать следующую структуру файла Строка с названием таблицы Строка, в каждой ячейке Решение (2) Сделать следующую структуру файла Строка с названием таблицы Строка, в каждой ячейке которой хранится значение поля Затем 0 или более строк со значениями этих полей Затем (опционально) – пустая строка Все тоже самое для другой таблицы

>Пример содержимого файла testtable,, id,name,value 1,проверка 1,true 2, Пример содержимого файла testtable,, id,name,value 1,проверка 1,true 2,"прове, 2",false 3,"про "" 3",false ,, secondTable,, id,name,

>Мелкая проблема Почему-то в Office 2010 хоть и пишут, что разделитель – запятая, но Мелкая проблема Почему-то в Office 2010 хоть и пишут, что разделитель – запятая, но ставят точку с запятой. А в 2007 офисе – все нормально, ставят запятую

>Возникающие проблемы 1) разбить файл на «части» по БД (мелочь) 2) Прочитать значения строк Возникающие проблемы 1) разбить файл на «части» по БД (мелочь) 2) Прочитать значения строк из файла (мелочь) 3) Понять, к какой таблице относится запись и какой класс надо создавать (мелочь) 4) воссоздать класс из строки + список полей (не совсем мелочь) 5) Добавить в таблицу новую запись (не совсем мелочь)

>Решение проблемы D:CourseCVSLoader Решение проблемы D:CourseCVSLoader

>Mock Mock

>Суть проблемы Мы знаем, что где-то что-то в последовательности вызовов глючит. Вопрос – где Суть проблемы Мы знаем, что где-то что-то в последовательности вызовов глючит. Вопрос – где и что? (особенно с учетом того, что каждый разработчик говорит, что у него нет ошибки) Решение – части системы заменить на заглушки. Если после замены глюки прекратятся – то ошибка или в замененной части или в блоке её вызова, т.е. будет сужение возможного пространства ошибки

>Встающие вопросы Какие термины используются с тестировании? (хотя бы часть списка) Dependency Injection Реализация Встающие вопросы Какие термины используются с тестировании? (хотя бы часть списка) Dependency Injection Реализация Mock С помощью какого инструментария реализовать Mock И еще кучка вопросов  http://habrahabr.ru/post/116372/

>Немного терминологии (1/2) Dummy - это объекты, которые передаются в методы, но на самом Немного терминологии (1/2) Dummy - это объекты, которые передаются в методы, но на самом деле не используются. В основном, это параметры методов (если конечно, они не влияют в тесте на то, что мы хотим проверить). Иногда это просто NULL Fake - это объекты, которые имеют внутреннюю реализацию, но обычно она сильно урезанная и их нельзя использовать в готовом коде.

>Немного терминологии (2/2) Stubs - обеспечивают жестко зашитый ответ на вызовы во время тестирования. Немного терминологии (2/2) Stubs - обеспечивают жестко зашитый ответ на вызовы во время тестирования. Применяются для замены тех объектов, которые обеспечивают SUT входными данными. Также они могут сохранять в себе информацию о вызове(например параметры или количество этих вызовов) - такие иногда называют своим термином Test Spy. Такая "запись" позволяет оценить работуSUT, если состояние самого SUT не меняется. Mocks - объекты, которые настраиваются (например специфично каждому тесту) и позволяют задать ожидания в виде своего рода спецификации вызовов, которые мы планируем получить

>Небольшой вывод В конечном счете любой класс – набор методов (с или без возвращаемого Небольшой вывод В конечном счете любой класс – набор методов (с или без возвращаемого значения) и набор свойств. Что бы сделать тест, надо заменить методы своими. Пример с использованием калькулятора с использованием библиотеки Mock и Stub Ограничение библиотек – то, что заменяемые методы должны быть виртуальными

>Использование Ninject в ASP MVC Использование Ninject в ASP MVC

>IoC - Inversion of Control (инверсия управления) Модули верхнего уровня не должны зависеть от IoC - Inversion of Control (инверсия управления) Модули верхнего уровня не должны зависеть от модулей нижнего уровня. Оба должны зависеть от абстракции. Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций. Суть - каждый компонент системы должен быть как можно более изолированным от других, не полагаясь в своей работе на детали конкретной реализации других компонентов. Следствие 1 – появление интерфейсов

>Суть проблемы Пусть есть задача интеграции с платежным шлюзом банка. Пусть у нас есть Суть проблемы Пусть есть задача интеграции с платежным шлюзом банка. Пусть у нас есть 100 тестов, которые проверяют работу с платежным шлюзом и в среднем делают с ним 5 операций. Тогда когда мы запускаем тесты идет маленькая DOS атака на шлюз – 500 обращений за 5-10 секунд Банк не доволен. Если учесть, что в среднем тесты запускаются каждые 30 минут у 5-6 разработчиков банк ОЧЕНЬ не доволен

>Суть решения В тестах заменить реализацию интерфейса взаимодействия с платежным шлюзом на «заглушку» (mock) Суть решения В тестах заменить реализацию интерфейса взаимодействия с платежным шлюзом на «заглушку» (mock)

>Решение («закат солнца в ручную)» Выделяем интерфейс взаимодействия с платежным шлюзом Делаем фабрику, которая Решение («закат солнца в ручную)» Выделяем интерфейс взаимодействия с платежным шлюзом Делаем фабрику, которая возвращает экземпляр класса, который реализует интерфейс Получаем экземпляры интерфейса только через фабрику

>Минусы решения Надо программировать А что если одна заглушка зависит от другой, т.е. в Минусы решения Надо программировать А что если одна заглушка зависит от другой, т.е. в параметрах конструктора есть интерфейс? Решение – сделать жестокую рефлексию с использованием теории графов (при этом развести циклические зависимости)

>Нормальное решение Взять гугл Поискать IoC контейнер для .NET (их несколько) Для примера использовать Нормальное решение Взять гугл Поискать IoC контейнер для .NET (их несколько) Для примера использовать ninject