gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 09:22:59 24 4
gpt4 key购买 nike

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

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

如何配置工作量测试工具来模拟 Entity Framework 的 DbContext,而无需启动并运行实际的 SQL Server 数据库?

*更新:

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

以下摘录自测试代码:

        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));
}

关于sql-server - 在没有实际的 SQL Server 数据库启动和运行的情况下,我将如何配置工作量测试工具来模拟 Entity Framework 的 DbContext?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27716714/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com