Я пытаюсь создать модульный тест для класса, который использует мой EF Core DbContext
:
public class MyContext : DbContext
{
public MyContext(DbContextOptions<MyContext> options) : base(options)
{
}
public DbSet<SomeTable> SomeTables { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
...
}
}
класс, который использует этот контекст, прост:
public class MyClass
{
public MyClass(MyContext db)
{
}
}
поэтому, когда я пытаюсь создать
var fakeContext = Substitute.For<MyContext>();
, что заканчивается ошибкой:
Castle.DynamicProxy.InvalidProxyConstructorArgumentsException : Can not instantiate proxy of class: MyContext.
Could not find a parameterless constructor.
, которая вызывается конструктором base(options)
. Итак, подход net заключался в расширении кода:
var dbContextOptions = Substitute.For<DbContextOptions<MyContext>>();
dbContextOptions.ContextType.Returns(typeof(MyContext));
var dbContextOptionsExtension = Substitute.For<IEnumerable<IDbContextOptionsExtension>>();
dbContextOptions.Extensions.Returns(dbContextOptionsExtension);
var myFakeContext = Substitute.For<MyContext>(dbContextOptions);
, но он генерирует больше ошибок. Итак, как это исправить?