如何对entityframeworkcore . ientitytypconfiguration进行单元测试?
我想确保我的配置是经过单元测试的,原因如下:
- 避免创建更多依赖于数据设置的集成测试的负担
- 使用一个特性标志框架,我想确保我映射到不同的视图和表取决于标志 的状态
- 我使用几个自定义转换器,我必须确保使用
- 简单地说,我想要清晰的自包含测试失败,以防有人改变了不应该改变的东西,在这一点上,他们必须故意删除测试
我找不到这个问题的答案,所以我不得不自己想办法。
var sut = new MyEntityTypeConfiguration();
var entityType = new EntityType("MyEntityName", typeof(MyEntityName), new Model(), false, ConfigurationSource.Convention);
var builder = new EntityTypeBuilder<MyEntityName>(entityType);
sut.Configure(builder);
// Metadata will contain all the set configurations
var meta = builder.Metadata;
var properties = builder.Metadata.GetDeclaredProperties();
var viewName = builder.Metadata.GetViewName();
[..]
我建议在您的测试库中使用这样的方法来简化设置
private static EntityTypeBuilder<T> GetEntityBuilder<T>() where T : class
{
#pragma warning disable EF1001 // Internal EF Core API usage.
var entityType = new EntityType(typeof(T).Name, typeof(T), new Model(), false, ConfigurationSource.Convention);
var builder = new EntityTypeBuilder<T>(entityType);
return builder;
#pragma warning restore EF1001 // Internal EF Core API usage.
}
可以这样使用:
var sut = new MyEntityTypeConfiguration();
var builder = GetEntityBuilder<MyEntity>();
sut.Configure(builder);
var meta = builder.Metadata;
var properties = builder.Metadata.GetDeclaredProperties();
var viewName = builder.Metadata.GetViewName();
一旦configure方法被调用,构建器元数据属性将包含正确EF配置所需的所有细节,这些细节是可访问的,并且您可以在其上执行任何所需的断言。