创建单元测试时,需要用提供测试数据的测试类替换依赖项。Entity Framework Core(EF Core)上下文中的依赖项又如何呢?通常没有一个接口是由上下文实现的,但是上下文本身(例如,BookContext)是被注入的。EF Core基于内存的提供程序提供了一个解决方案,可以将其用作模拟类,而不是使用EF Core SQL Server提供程序。
下面从一个简单的Book类型、BooksContext和BooksServer开始。BooksService类应该在单元测试中进行测试。
Book是一个简单的类,它保留了一些属性:
public class Book
{
public int BookId { get; set; }
public string Title { get; set; }
public string Publisher { get; set; }
}
类BooksContext管理到数据库的连接,并将Book类型影射到Books表:
public class BooksContext : DbContext
{
public BooksContext(DbContextOptions<BooksContext> options)
: base(options) { }
public DbSet<Book> Books { get; set; }
}
最后,类BooksService通过依赖注入使用BooksContext,并定义GetTopBooksByPublisher方法。这个方法应该只返回10本书: