【问题标题】:Unit Test EntityFrameworkCore IEntityTypeConfiguration<T>单元测试 EntityFrameworkCore IEntityTypeConfiguration<T>
【发布时间】:2023-01-18 23:21:24
【问题描述】:

如何对 EntityFrameworkCore.IEntityTypeConfiguration 进行单元测试?

我想确保我的配置经过单元测试,原因有以下几个:

  1. 避免创建更多依赖于数据设置的集成测试的负担
  2. 使用功能标志框架,我想确保根据标志的状态映射到不同的视图和表
  3. 我有几个我必须确保使用的自定义转换器
  4. 简单地说,我希望清晰的自包含测试失败,以防有人更改不应该更改的内容,此时他们必须有意删除测试

    我无法找到这个问题的答案,所以我不得不自己去挖掘它。

【问题讨论】:

    标签: c# entity-framework-core


    【解决方案1】:
    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 配置所需的所有详细信息,这些信息是可访问的,您可以在这些信息上执行任何所需的断言。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-14
      • 1970-01-01
      • 1970-01-01
      • 2017-12-30
      • 2018-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多