Гость
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Moq на EntityFramework / 19 сообщений из 19, страница 1 из 1
13.06.2012, 11:29
    #37836044
Sky Dragon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Moq на EntityFramework
Добрый день!

Кто-нибудь делал Moq на EF? Просто он не наследует никакой интерфейс. И даже при выделении этого интерфейса остается вопрос, как заполнять ObjectSet'ы, когда у них отсутствует конструктор.
Сам EF заполняет их из ObjectContext'а прям из БД, как я понимаю.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 public ObjectSet<Person> People
        {
            get
            {
                if ((_People == null))
                {
                    _People = base.CreateObjectSet<Person>("People");
                }
                return _People;
            }
        }



А делать Moq на ObjectContext и наследовать moq от moq'a это уже извращение ) Причем не факт, что так получится сделать, ибо ObjectContext просит строку подключения к БД...
...
Рейтинг: 0 / 0
13.06.2012, 12:16
    #37836142
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Moq на EntityFramework
Поэтому проще подсунуть контексту тестовую БД с тестовыми данными.
...
Рейтинг: 0 / 0
13.06.2012, 12:52
    #37836196
Sky Dragon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Moq на EntityFramework
Алексей К,

Это я уже запомнил из прошлого разговора) Просто вдруг кто знает и другое решение
...
Рейтинг: 0 / 0
13.06.2012, 12:57
    #37836206
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Moq на EntityFramework
TDD требует несколько иного подхода к формированию архитектуры приложения... Из-за чего копеечные проекты обрастают килограммами всяких интерфейсов и репозитариев/фабрик паттернов-маттернов...Если вам нуно - вперед... отделяйте работу с конкретным фреймворком (EF) отдельным забором от вашего кода. Если нет - слушайте Алексей К :)
...
Рейтинг: 0 / 0
13.06.2012, 13:14
    #37836232
Sky Dragon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Moq на EntityFramework
buser,

ну пусть копеечные обрастают дальше;)

то есть Вы хотите сказать, что для TDD и больших проектов EF не используется, и надо писать свой слой доступа к данным?
Просто как ооочень многие люди говорят: "очередной велосипед"... я не знаю уровень этих программистов, кто так говорит и мб это просто пальцы веером...
...
Рейтинг: 0 / 0
13.06.2012, 13:17
    #37836237
Sky Dragon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Moq на EntityFramework
Да, и тестовые данные естественно будут меняться. Если тесты пишутся для одних данных, то в ходе выполнения этих тестов эти же данные могут меняться так, что другие тесты уже проходить не будут.
Каждый раз чистить БД и заполнять ее заново перед каждым тестом... некозырно как-то )
...
Рейтинг: 0 / 0
13.06.2012, 13:45
    #37836293
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Moq на EntityFramework
Sky Dragonто есть Вы хотите сказать, что для TDD и больших проектов EF не используется
Ну почему... используют... Ведь "каждый буратино сам себе враг"
Sky DragonДа, и тестовые данные естественно будут меняться. Если тесты пишутся для одних данных, то в ходе выполнения этих тестов эти же данные могут меняться так, что другие тесты уже проходить не будут.
Каждый раз чистить БД и заполнять ее заново перед каждым тестом... некозырно как-то )
Может и так... но сделать это не так уж и сложно....
А вообще посмотрите на стеке темы
...
Рейтинг: 0 / 0
13.06.2012, 13:45
    #37836295
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Moq на EntityFramework
Sky DragonДа, и тестовые данные естественно будут меняться. Если тесты пишутся для одних данных, то в ходе выполнения этих тестов эти же данные могут меняться так, что другие тесты уже проходить не будут.
Каждый раз чистить БД и заполнять ее заново перед каждым тестом... некозырно как-то )Зачем изменять тестовую базу? Не изменяйте её. Заведите под это дело отдельную БД если нужно.
...
Рейтинг: 0 / 0
13.06.2012, 14:00
    #37836324
Sky Dragon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Moq на EntityFramework
buser,

Посмотрю, спасибо

Алексей К,

ну БД отдельная. Но данные же все равно меняются. Например там 10 записей. мы 10 раз протестировали функцию удаления. На 11 тест не пройдет, так как удаления и не произойдет.
...
Рейтинг: 0 / 0
13.06.2012, 14:14
    #37836347
SolYUtor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Moq на EntityFramework
Sky Dragon,

Правильные ответ - это NHibernate + SQLite in memory :)
...
Рейтинг: 0 / 0
13.06.2012, 14:27
    #37836375
Sky Dragon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Moq на EntityFramework
SolYUtor,

про NHibernate уже много слышал, но до изучения пока не дошел. На данном этапе выбрали EF. Но на будущее учту, спасибо )
...
Рейтинг: 0 / 0
13.06.2012, 15:13
    #37836460
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Moq на EntityFramework
Sky Dragonну БД отдельная. Но данные же все равно меняются. Например там 10 записей. мы 10 раз протестировали функцию удаления. На 11 тест не пройдет, так как удаления и не произойдет.В начале теста начать транзакцию. В конце - отменить?
...
Рейтинг: 0 / 0
13.06.2012, 15:27
    #37836490
SolYUtor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Moq на EntityFramework
Алексей КВ начале теста начать транзакцию. В конце - отменить?
Ммм. Ощутить прелести распределённых транзакций?
...
Рейтинг: 0 / 0
13.06.2012, 15:56
    #37836540
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Moq на EntityFramework
SolYUtorАлексей КВ начале теста начать транзакцию. В конце - отменить?
Ммм. Ощутить прелести распределённых транзакций?Нет! Распределённые транзакции на пустом месте зло!

Код: c#
1.
2.
3.
4.
5.
6.
7.
using (var db = GetDbContextWithOpenedConnection())
using (var ts = new TransactionScope())
{
    // тут чё-то изменяем
    db.SaveChanges();
    // ts.Complete(); намеренно не вызываем
}
...
Рейтинг: 0 / 0
13.06.2012, 16:19
    #37836576
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Moq на EntityFramework
SolYUtorАлексей КВ начале теста начать транзакцию. В конце - отменить?
Ммм. Ощутить прелести распределённых транзакций?А чтобы иметь один ДбКонтекст и не таскать его между методами можно применить: using + ThreadStatic + счётчик ссылок .
...
Рейтинг: 0 / 0
14.06.2012, 07:35
    #37837229
Sky Dragon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Moq на EntityFramework
Алексей К,

Тогда такой еще вопрос. Не к конкретному примеру, а вообще. Обязательно при работе с БД всюду и всегда использовать транзакции? Я пока с ними еще ни разу не работал просто.
...
Рейтинг: 0 / 0
14.06.2012, 07:45
    #37837237
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Moq на EntityFramework
Sky DragonТогда такой еще вопрос. Не к конкретному примеру, а вообще. Обязательно при работе с БД всюду и всегда использовать транзакции? Я пока с ними еще ни разу не работал просто.Всё зависит от задачи. Если работаем через EF, SaveChanges сохраняет всё в одной транзакции. Самостоятельное объявление транзакции может потребоваться, если нужно несколько SaveChanges объединить в одну транзакцию.
...
Рейтинг: 0 / 0
14.06.2012, 07:46
    #37837238
Алексей К
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Moq на EntityFramework
Но в этом случае лучше бы работать с одним объектом ДбКонтекста, в противном случае транзакция станет распределённой.
...
Рейтинг: 0 / 0
14.06.2012, 08:23
    #37837264
Sky Dragon
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Moq на EntityFramework
Алексей К,

ну пока более одного SaveChanges в действии не встречалось
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Moq на EntityFramework / 19 сообщений из 19, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]