Вы должны знать, что ваш DbContext представляет таблицы в вашей базе данных и отношения между этими таблицами.Каждый DbSet<...>
в вашем DbContext
представляет одну конкретную таблицу.Строки в таблице представлены классом в <...>
.
Эти классы должны быть простыми POCO: столбцы вашей таблицы представлены не виртуальными свойствами, виртуальные свойства представляют отношения междутаблицы.
Следовательно, в вашем классе не должно быть ни полей, ни процедур: строка вашей таблицы не знает, как PerformFunction(...)
, не так ли?
Если вы хотите добавитьфункциональность для строки вашей таблицы, вы должны определить функцию расширения вашего класса.
Но как мне предположить проверить мою базу данных?
Я думаю, еслиВы используете хорошую систему управления базами данных, вам не нужно ее проверять.ИМХО базы данных MicroSoft и MySql протестированы лучше, чем когда-либо.
Однако вы должны проверить, как вы используете свою базу данных!Сохраняете ли вы элементы, которые хотите сохранить, и извлекаете ли вы элементы, которые хотите получить?Вам не нужно беспокоиться о том, правильно ли сущностная структура переводит ваши запросы в SQL.Это проверялось снова и снова.
Существует несколько распространенных методов проверки правильности использования базы данных.
Использование управляемой базы данных в памятипо структуре лица
Это самый простой.Используйте, например, пакет nuget усилия
Одним из конструкторов DbContext является тот, с параметром DbConnection.Этот конструктор используется для подключения к базе данных в памяти:
class SchoolDbContext : DbContext
{
public SchoolDbContext() : DbContext
{
// default constructor
}
public SchoolDbContext(DbConnection connection) : DbContext(dbConnection, false)
{
// constructor that uses the in-memory database
}
public DbSet<School> Schools {get; set;}
public DbSet<Student> Students {get; set;}
...
}
Использование в тесте:
DbConnection inMemoryDbConnection = Effort.DbConnectionFactory.CreatePersistent(testDbName);
using(var schoolDbContext = new SchoolDbContext(inMemoryConnection);
{
// TODO: fill the database with test values
...
IEqualityComparer<Student> studentComparer = ...
var expectedObsoleteStudents = schoolDbContext.Students
.Where(student => student.Obsolete)
.ToHashSet(studentComparer);
// Perform the Test:
var testObject = new MyClassThatUsesADataBase()
{
SchoolDbContext = schoolDbContext();
}
// Test function: FetchObsoleteStudents, and check that the expected students are fetched
var obsoleteStudents = testObject.FetchObsoleteStudents();
Assert.IsTrue(expectedObsoleteStudents.EqualSet(obsoleteStudents);
}