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

Кто-нибудь делал 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
Moq на EntityFramework
    #37836142
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поэтому проще подсунуть контексту тестовую БД с тестовыми данными.
...
Рейтинг: 0 / 0
Moq на EntityFramework
    #37836196
Sky Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Алексей К,

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

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

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

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

Алексей К,

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

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

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

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

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

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


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