在没有实际的 SQL Server 数据库启动和运行的情况下,我将如何配置工作量测试工具来模拟实体框架的 DbContext?

2024-04-23

我们团队的应用程序开发涉及使用工作量测试工具来模拟我们的实体框架的 DbContext。然而,工作量测试工具似乎需要查看应用程序使用的实际 SQL Server 数据库,以便模拟我们的实体框架的 DbContext,这似乎违反了正确的单元测试原则。

原因是,为了通过模拟与数据库连接相关的任何内容(例如实体框架的 DbContext)来对我们的应用程序代码进行单元测试,我们永远不需要启动并运行数据库。

在没有实际的 SQL Server 数据库启动和运行的情况下,我将如何配置工作量测试工具来模拟实体框架的 DbContext?

* 更新:

@gert-arnold 我们正在使用实体框架模型优先方法来实现后端模型和数据库。

以下摘自测试代码:

        connection = Effort.EntityConnectionFactory.CreateTransient("name=NorthwindModel");
        jsAudtMppngPrvdr = new BlahBlahAuditMappingProvider();
        fctry = new BlahBlahDataContext(jsAudtMppngPrvdr, connection, false);
        qryCtxt = new BlahBlahDataContext(connection, false);
        audtCtxt = new BlahBlahAuditContext(connection, false);
        mockedReptryCtxt = new BlahBlahDataContext(connection, false);
        _repository = fctry.CreateRepository<Account>(mockedReptryCtxt, null);
        _repositoryAccountRoleMaps = fctry.CreateRepository<AccountRoleMap>(null, _repository);

“name=NorthwindModel”与我们的 edmx 文件相关,其中包含有关数据库表的信息 以及它们的对应关系。

如果我通过像下面的代码行那样建立连接来删除“name=NorthwindModel”,则会收到一条错误消息,指出它需要一个参数:

   connection = Effort.EntityConnectionFactory.CreateTransient(); // throws error

您能解释一下上述代码应该如何重写吗?


您只需要该连接字符串,因为 Effort 需要知道 EDMX 文件在哪里。

EDMX 文件包含创建具有与数据库中相同架构的内存存储所需的所有信息。您必须指定一个连接字符串,只是因为我认为如果用户不必弄乱 EDMX 路径,这会很方便。

如果您检查 CreateTransient 方法的实现,您会发现它仅使用连接字符串来获取其中的元数据部分。

public static EntityConnection CreateTransient(string entityConnectionString, IDataLoader dataLoader)
{
    var metadata = GetEffortCompatibleMetadataWorkspace(ref entityConnectionString);
    var connection = DbConnectionFactory.CreateTransient(dataLoader);
    return CreateEntityConnection(metadata, connection);
}

private static MetadataWorkspace GetEffortCompatibleMetadataWorkspace(ref string entityConnectionString)
{
    entityConnectionString = GetFullEntityConnectionString(entityConnectionString);

    var connectionStringBuilder = new EntityConnectionStringBuilder(entityConnectionString);

    return MetadataWorkspaceStore.GetMetadataWorkspace(
        connectionStringBuilder.Metadata,
        metadata => MetadataWorkspaceHelper.Rewrite(
            metadata, 
            EffortProviderConfiguration.ProviderInvariantName, 
            EffortProviderManifestTokens.Version1));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在没有实际的 SQL Server 数据库启动和运行的情况下,我将如何配置工作量测试工具来模拟实体框架的 DbContext? 的相关文章