powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / DataBase First, тестирование
2 сообщений из 2, страница 1 из 1
DataBase First, тестирование
    #38712069
Vixler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

Что-то я замучился искать уже.

В общем, суть в чём. Есть одна функция. На входе - некие данные, на основе этих данных подгружаются дополнительные данные из БД, анализируются и на основе этого анализа записываются ещё какие-то данные в БД.

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

Только вот из всех примеров в интернете ещё не нашёл ни одного, который бы у меня заработал. Прям на стену лезть хочется.

Есть вот это http://www.codeproject.com/Articles/460175/Two-strategies-for-testing-Entity-Framework-Effort

Пытался юзать Effort. При записи объекта в БД вылетает длинная ошибка:
"Code generated using the T4 templates for Database First and Model First development may not work correctly if used in Code First mode. To continue using Database First or Model First ensure that the Entity Framework connection string is specified in the config file of executing application. To use these classes, that were generated from Database First or Model First, with Code First add any additional configuration using attributes or the DbModelBuilder API and then remove the code that throws this exception."

Вот и чё ему надо? Какой ещё Code First? .edmx-файл был сформирован в Visual Studio на основе готовой БД в MS SQL.

Пытался юзать SQL CE, как в примере. Та же ошибка.

Пытался использовать Mock, появившийся в EF 6. Там вообще какая-то байда с ключами. При сохранении ругается, мол, нет ключевых полей. Потому что генератор edmx-файла не подставляет сам атрибут [Key]. После того, как в tt.-файл прописал добавление [Key], стало ругаться на ещё какой-то отсутствующий атрибут. И сколько их таких будет? И нельзя ли, чтобы оно это автоматом делало?

В общем, есть ли где-нибудь рабочий актуальный пример, как оттестировать логику dbContext'a?

Используем EF 6.1, DataBase First.
...
Рейтинг: 0 / 0
DataBase First, тестирование
    #38712672
Vixler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо за ответы, разобрался.

Использовал Effort.

Пример

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
[TestMethod]
        public void Test()
        {
             // Лоадер нужен, чтобы подгрузить данные из реальной базы. MyEntities - имя строки подключения в app.config
             // Если лоадер в параметре оставить пустым, то будем работать с пустыми DbSet'ами.
             var loader = new EntityDataLoader("name=MyEntities");
             var connection =
                Effort.EntityConnectionFactory.CreateTransient("name=MyEntities",loader);            
           
            using (var context = new MyEntities(connection))
            {
                var testTableRepository = new BaseRepository<TestTable>(context);                
                
                // В базе уже есть две записи в тестовой таблице, проверяем, что данные из БД действительно подгрузились
                var count = testTableRepository.GetAll().Count;
                Assert.AreEqual(count, 2);

                // Создаём ещё две записи, используя репозиторий и DbSet контекста
                testTableRepository.Add(new TestTable() { Id = 4, TestColumn = "4" });
                count = testTableRepository.GetAll().Count;               

                context.TestTable.Add(new TestTable() { Id = 3, TestColumn = "3" });
                context.SaveChanges();

                // Теперь записей четыре (в памяти, в БД по-прежнему две)
                count = context.TestTable.Count();
                Assert.AreEqual(count, 4);
            }

            // Несмотря на то, что контекст был уничтожен, созданные выше данные никуда не делись, остались в памяти
            // Создаём новый контекст и проверяем, сколько у нас записей. Должно быть всё также четыре
            using (var context2 = new MyEntities(connection))
            {
                var count2 = context2.TestTable.Count();

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


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