Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
5 / 5 / 3
Регистрация: 15.01.2017
Сообщений: 690

Как тестировать Entity Framework?

26.07.2020, 15:32. Показов 1778. Ответов 10

Студворк — интернет-сервис помощи студентам
Вопрос.
Как тестировать Entity Framework?

Используется.
- JetEntityFrameworkProvider;
- БД - MS Access.

Описание
Проект расположен в папке - C:\test\.
БД расположена в папке - C:\test\.

Пробую тестировать проект.
В строке
Operations.cs
C#
1
contextDB.SaveChanges();
получаю ошибку.
"Внутреннее исключение 1:
SqlException: При установлении соединения с SQL Server произошла ошибка, связанная с сетью или с определенным экземпляром. Сервер не найден или недоступен. Убедитесь, что имя экземпляра указано правильно и что на SQL Server разрешены удаленные соединения. (provider: TCP Provider, error: 0 - Удаленный компьютер отклонил это сетевое подключение.)

Внутреннее исключение 2:
Win32Exception: Удаленный компьютер отклонил это сетевое подключение"


Код
Operations.cs
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
using ConsoleApp.Model;
 
namespace ConsoleApp.Core
{
    public class OperationsCRUDAccessDB
    {
        
        public void InsertEntity()
        {
            using (ContextDB contextDB = new ContextDB())
            {
 
                Planet planet = new Planet()
                {
                    ID = 11,
                    PlanetName = "WithPK_PlanetNameTest",
                    DistanceFromSun = 654,
                    Inhabitance = "Inhabitance_1",
                };
 
                contextDB.Planets.Add(planet);
                contextDB.SaveChanges();
            }
        }
 
    }
}
ContextDB.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
using System.Data.Entity;
 
namespace ConsoleApp.Model
{
    public class ContextDB : DbContext
    {
        public ContextDB() : base("DefaultConnection")
        {
           Database.SetInitializer<ContextDB>(null);
        }  
        public DbSet<Planet> Planets { get; set; }        
    }
}
Planet.cs
C#
1
2
3
4
5
6
7
8
9
10
11
namespace ConsoleApp.Model
{
    [Table("Planet")]
    public class Planet
    { 
        public int ID { get; set; }
        public string PlanetName { get; set; }
        public int DistanceFromSun { get; set; }
        public string Inhabitance { get; set; }        
    }
}
Program.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
using ConsoleApp.Core;
 
namespace ConsoleApp
{
    class Program
    {
        static void Main(string[] args)
        {
            OperationsCRUDAccessDB operations = new OperationsCRUDAccessDB();
 
            operations.InsertEntity();
        }
    }
}
UnitTest1.cs
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
39
40
using Microsoft.VisualStudio.TestTools.UnitTesting;
 
using ConsoleApp.Core;
using ConsoleApp.Model;
using System.Linq;
 
namespace UnitTestProject1
{
    [TestClass]
    public class UnitTest1
    {   
        [TestMethod]
        public void InsertEntity_Test()
        {
            Planet planetOrig = new Planet()
            {
                ID = 11,
                PlanetName = "WithPK_PlanetNameTest",
                DistanceFromSun = 654,
                Inhabitance = "Inhabitance_1",
            };
            Planet planetResult;
 
            
            OperationsCRUDAccessDB operationsCRUDAccessDB = new OperationsCRUDAccessDB();
            operationsCRUDAccessDB.InsertEntity();
            
            using (ContextDB contextDB = new ContextDB())
            {
                planetResult = contextDB.Planets
                            .Where(c => c.PlanetName == "WithPK_PlanetNameTest")
                            .FirstOrDefault();
            }
 
            // Сравнение
            Assert.AreEqual(planetOrig, planetResult);
        }
 
    }
}
Миниатюры
Как тестировать Entity Framework?  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.07.2020, 15:32
Ответы с готовыми решениями:

В чем разница между Entity Framework и Entity Framework Core?
В чем разница (если она есть) между entity framework и entity framework core?

Entity Framework. Удаление entity без удаления связей
Вечер добрый. Есть модель Coder First. Каскадное удаление запрещено. Удаление произвожу так: try { ...

Как обновить Entity Framework
Всем привет. У меня возник вопрос. Я использую Entity Framework. И Если например в базе у меня поменялась процедура (к примеру добавился...

10
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
26.07.2020, 16:43
ID - автоинкремент ?

Добавлено через 21 минуту
Насколько я знаю, в EF требуется чтобы первыми полями моделей были Id и чтобы они были Primary и auto.
И как следствие, операция добавления приводит к тому, что акцес получает запрос на вставку, в котором поле ID не указано (EF, а точнее класс DbSet, его просто игнорирует), при этом в таблице оно (поле) не определено как autoincrement, но в то же время requied.
1
5 / 5 / 3
Регистрация: 15.01.2017
Сообщений: 690
26.07.2020, 18:07  [ТС]
Цитата Сообщение от MsGuns Посмотреть сообщение
ID - автоинкремент ?

Насколько я знаю, в EF требуется чтобы первыми полями моделей были Id и чтобы они были Primary и auto.
И как следствие, операция добавления приводит к тому, что акцес получает запрос на вставку, в котором поле ID не указано (EF, а точнее класс DbSet, его просто игнорирует), при этом в таблице оно (поле) не определено как autoincrement, но в то же время requied.
Это комментарий к этой теме - https://www.cyberforum.ru/ado-... 84485.html ?


Цитата Сообщение от MsGuns Посмотреть сообщение
ID - автоинкремент ?
--------------
Для темы: https://www.cyberforum.ru/ado-... 84519.html (текущая тема)
Использовал:
- ID - автоинкремент;
- ID - число.
Результат: проблема осталась.

--------------
Для темы: https://www.cyberforum.ru/ado-... 84485.html
Решение-1. Использую: ID - число;
Код - Operations.cs
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
using ConsoleApp.Model; 
namespace ConsoleApp.Core
{
    public class Operations
    {       
        public void InsertEntity()
        {
            using (ContextDB contextDB = new ContextDB())
            {
                
                Planet planet = new Planet()
                {
                    ID = 11,
                    PlanetName = "WithPK_PlanetNameTest",
                    DistanceFromSun = 654,
                    Inhabitance = "Inhabitance_1",
                };
 
                contextDB.Planets.Add(planet);
                contextDB.SaveChanges();                
            }
        }
    }
}
Результат: добавляется запись с ID = 0.

Решение-2. Использую: ID - автоинкремент;
Закомментировал - "ID = 11".
Код - Operations.cs
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
using ConsoleApp.Model; 
namespace ConsoleApp.Core
{
    public class Operations
    {       
        public void InsertEntity()
        {
            using (ContextDB contextDB = new ContextDB())
            {
                
                Planet planet = new Planet()
                {
                    // ID = 11,
                    PlanetName = "WithPK_PlanetNameTest",
                    DistanceFromSun = 654,
                    Inhabitance = "Inhabitance_1",
                };
 
                contextDB.Planets.Add(planet);
                contextDB.SaveChanges();                
            }
        }
    }
}
Результат: Добавляется запись. ID - формируется в БД.
0
1497 / 1238 / 245
Регистрация: 04.04.2011
Сообщений: 4,363
26.07.2020, 19:02
Цитата Сообщение от Soft17 Посмотреть сообщение
Результат: добавляется запись с ID = 0.
Причину я указал в [2]

Цитата Сообщение от Soft17 Посмотреть сообщение
Результат: Добавляется запись. ID - формируется в БД.
И значение ID определяется СУБД и !=0
Т.е. проблема решена, так ?
0
5 / 5 / 3
Регистрация: 15.01.2017
Сообщений: 690
26.07.2020, 21:20  [ТС]
Цитата Сообщение от MsGuns Посмотреть сообщение
Т.е. проблема решена, так ?
Нет.

Описание.
Установил в БД поле ID автоинкремент.

Запускаю отладку программы - "F5".
Результат: запись добавляется. ID формируется базой данных.

Запускаю тест: UnitTest1.cs
Результат: получаю ошибку как в вопросе.
0
785 / 616 / 273
Регистрация: 04.08.2015
Сообщений: 1,713
26.07.2020, 23:08
Цитата Сообщение от Soft17 Посмотреть сообщение
БД - MS Access.
Цитата Сообщение от Soft17 Посмотреть сообщение
При установлении соединения с SQL Server
Разные модели?
0
Эксперт .NET
 Аватар для Usaga
14087 / 9305 / 1348
Регистрация: 21.01.2016
Сообщений: 34,949
27.07.2020, 07:34
Цитата Сообщение от Soft17 Посмотреть сообщение
Как тестировать Entity Framework?
Никак. Он уже за вас протестирован.

Цитата Сообщение от MsGuns Посмотреть сообщение
Насколько я знаю, в EF требуется чтобы первыми полями моделей были Id и чтобы они были Primary и auto.
Это вы откуда такое взяли?)
1
5 / 5 / 3
Регистрация: 15.01.2017
Сообщений: 690
27.07.2020, 09:52  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Никак. Он уже за вас протестирован.
т.е. код из класса Operations.cs тестировать не требуется?
А работоспособность запросов выполнять просто запуском приложения?
0
Эксперт .NET
 Аватар для Usaga
14087 / 9305 / 1348
Регистрация: 21.01.2016
Сообщений: 34,949
27.07.2020, 10:17
Лучший ответ Сообщение было отмечено Soft17 как решение

Решение

Цитата Сообщение от Soft17 Посмотреть сообщение
т.е. код из класса Operations.cs тестировать не требуется?
Это вам решать, требуется или нет. Вопрос "Как тестировать Entity Framework?" подразумевает, что вы саму ORM тестировать собрались.

Цитата Сообщение от Soft17 Посмотреть сообщение
А работоспособность запросов выполнять просто запуском приложения?
Как правило - да. Тестирование работы с СУБД уже является разновидностью интеграционного тестирования и может быть сложно в реализации. Если вы прямо уверены, что вам это надо, тогда делайте. Если не уверены, если есть какие-то сомнения по этому поводу, то 100% оно вам не нужно.
1
HF
 Аватар для HF
1303 / 882 / 199
Регистрация: 09.09.2011
Сообщений: 2,590
Записей в блоге: 2
27.07.2020, 10:52
Цитата Сообщение от Usaga Посмотреть сообщение
Вопрос "Как тестировать Entity Framework?" подразумевает, что вы саму ORM тестировать собрались.
Зачем вы так с ним. Не все поймут подобный подкол, а воспримут как наезд.

Цитата Сообщение от Usaga Посмотреть сообщение
Цитата Сообщение от Soft17
А работоспособность запросов выполнять просто запуском приложения?
Как правило - да. Тестирование работы с СУБД уже является разновидностью интеграционного тестирования и может быть сложно в реализации.
Именно это и делают. Видал я проект с кучей сервисов, где "штабелями" были прописаны .Include. Поэтому требованием было - покрыть всё сверху донизу тестами. Так что тема эта мутная. И проверить такое не всегда просто, да и тесты подобные тоже писать надо уметь, а если напишешь, то ужаснёшься результату.
1
Эксперт .NET
 Аватар для Usaga
14087 / 9305 / 1348
Регистрация: 21.01.2016
Сообщений: 34,949
27.07.2020, 11:01
Цитата Сообщение от HF Посмотреть сообщение
Видал я проект с кучей сервисов, где "штабелями" были прописаны .Include.
На самом деле, в большинстве случаев сие есть bad practice. Тут не тестами выкручиваться надо, а проекции использовать. В общем, как всегда: неудачное решение в основе ведёт к неудобствам дальнейшем)
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.07.2020, 11:01
Помогаю со студенческими работами здесь

Entity framework 4.1: как обновить таблицу
На основе модели entity framework создал базу данных и в ней таблицу, после изменения модели, начинает выскакивать ошибка в которой...

Как работает Entity Framework Core
Добрый день! В веб проекте будет сканирование штрихкодов, как штрихкод сканируется, полученный код это номер заказа. Этот код далее пройдет...

Entity Framework как настроить отношение
Добрый день, есть вопрос, у меня есть 3 таблицы: ProductType (продукт), PackingType(фасовка), Prices (цены). В чем суть, у каждого продукта...

Как вытащить значение в Entity Framework?
Пишу универсальную функцию для экспортирования данных из БД в Excel. Беру значения из БД: UnitOfWork uow = new UnitOfWork(); var...

Как подключить БД MS Access к Entity Framework?
Подскажите,плиз, как подключить бд ms access к entity framework?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru