问题标签 [effort]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1440 浏览

c# - 努力进行单元/集成测试 EF - 未找到连接字符串

我最近开始使用内存数据库 Effort 对我的实体框架实现进行单元测试。

一切正常,除非我尝试使用 CSV 数据加载器将 CSV 文件中的数据加载到数据库中。

关于如何配置 csvdataloader 的文档似乎很少/不足。

这是我编写的 NUnit 3.0 单元测试之一:

上线抛出异常:

异常详情:

System.ArgumentException 未被用户代码处理
HResult=-2147024809 Message=Connectionstring 未找到 参数名称:entityConnectionString ParamName=entityConnectionString
Source=Effort StackTrace:在 Effort.EntityConnectionFactory.GetFullEntityConnectionString(String entityConnectionString) 在 Effort.EntityConnectionFactory.GetEffortCompatibleMetadataWorkspace(String& entityConnectionString)在 Effort.EntityConnectionFactory.CreateTransient(String entityConnectionString, IDataLoader dataLoader) 在 Infrastructure.EF6.UnitTests.PacsQueryTests`1.GetBudgetIncomeItems_MultipleValidItems_ReturnList() 在 \PacsQueryTests.cs:line 36 InnerException:

任何帮助,将不胜感激...

更新

根据下面@Evk 的评论,首先使用代码时,您必须使用 DbConnection 和 DbConnectionFactory 类,而不是 EntityConnection 和 EntityConnectionFactory 类。

我更新的代码不会引发任何错误,如下所示:

0 投票
1 回答
1181 浏览

c# - NUnit : Effort.Exceptions.EffortException : Effort 库未能自动注册其提供者,因此需要手动注册

我正在开发 Web API,在使用 NUnit 进行单元测试时,我遇到了这个错误,它说:

这是我正在运行的测试:

错误被抛出_dbConnection = Effort.DbConnectionFactory.CreateTransient();

我遵循了例外给出的两个建议。但没有一个奏效。

我尝试过的事情:

  • 异常助手中的这两个建议
  • 更新包 - 重新安装努力
0 投票
1 回答
1282 浏览

c# - EntityFramework、DbContextScope 和 Effort - 异常:DbContext 已在单元测试中处理

我正在尝试为服务层编写单元测试(使用 NUnit),它使用:

  1. 实体框架作为数据访问层
  2. 用于管理 DbContext 生命周期的DbContextScope

我还使用Effort.EF6在单元测试中模拟 DbContext。不幸的是,我找不到使 DbContextScope 与 Effort 兼容的方法,以便我可以正确测试所有案例。


代码概述

服务层由执行某些业务逻辑的类(服务)组成。每个方法都被视为一个完整的事务,以 . 结尾context.SaveChanges()。例子:

为了对这种方法进行单元测试,我在每次测试之前都做了一些准备:


测试和问题

这是一个简单的单元测试:

问题是测试失败并出现异常:

似乎在Insert方法内部使用的 DbContextScope 会在块的末尾处理分配的上下文,using因此Assert在调用时会抛出异常。有没有人遇到过类似的问题,或者只是知道我应该怎么做才能成功测试这个和类似的场景?

0 投票
1 回答
603 浏览

c# - 努力(EF单元测试)给出错误

我正在尝试对一些回复实体框架数据库上下文的类进行单元测试。寻求帮助,我设法找到了一个名为 Effort 的库,它似乎有点旧,文档也不是很好,但它似乎可以工作,而且似乎很受欢迎。

我正在尝试使用 CSV 数据加载器。

做的时候ToArray()我收到一个例外说Sequence contains no matching element

关于我可能做错了什么的任何想法?或者,如果不是不同的图书馆,我可能想给一个机会?

几个片段:

数据库上下文:

SEC_USER.csv:

考试:

System.InvalidOperationException:

0 投票
2 回答
1561 浏览

c# - Effort (C#) - 将数据播种到我的任何实体时,“序列不包含匹配元素”

我正在尝试为我的项目中的一些 Web 服务调用构建一些单元测试。我在我的项目中使用 Entity Framework 6.1.3 来检索服务层的数据(使用代码优先方法)。我做了一些关于如何模拟 DatabaseContext 对象的研究,我发现 Effort 可以做到这一点。

在我的单元测试中实现 Effort 时,我遵循了文档,但是当我尝试将数据播种到我的实体时,我得到一个“System.InvalidOperationException:'Sequence contains no matching element'”异常。我不完全确定为什么会这样。任何帮助都感激不尽。谢谢!

这是代码的样子......

这是我向实体播种数据的地方...

这是我的实体模型...

这是我的数据库上下文...

我还有另一个覆盖 OnModelCreating 的类 FakeDbContext.Base。

这是堆栈跟踪:

堆栈跟踪

0 投票
0 回答
421 浏览

c# - 使用 Effort 验证单元测试的唯一键

我目前正在为现有解决方案中的单元测试做 POC。我一直在这里和那里阅读,我看到一个库,我发现做涉及实体框架的测试非常有趣,是 Effort ( https://effort.codeplex.com/ )。

在我的第一次测试中,Effort 很好地模拟了我的数据库上下文,没有抛出奇怪的错误,大多数操作都很好,比如添加一条新记录并在表具有标识时增加我的主键,在那一刻很好,直到我遇到了一个涉及具有唯一键的表的情况。

这是我目前的情况:

  1. 数据库优先模型。

  2. 上下文和实体都没有唯一键规则,因此如果 Effort 在“内存中”工作,则唯一键必须存在于代码中,因此 Effort 在此过程中使用它,所以我在我的实体中手动添加了唯一键只是为了测试它,我在我的类(实体)的三个属性(字段)中添加了它:

    [索引(“UK_WhateverName”,IsUnique = true,Order = 1)]

    [索引(“UK_WhateverName”,IsUnique = true,Order = 2)]

    [索引(“UK_WhateverName”,IsUnique = true,Order = 3)]

  3. 该方法内部有一个 try catch,try 内部是 dbcontext.SaveChanges()。在实际情况下,当违反唯一键规则时会捕获 DbUpdateException,因此当这种情况发生时,该方法将返回 -1。

  4. 我假设即使 Effort 能够捕获唯一键故障,它也可能不会抛出 DbUpdateException,因此我添加了一个额外的捕获来捕获异常,即任何可能发生的异常。

  5. 该代码在实际条件下工作正常,当唯一密钥被侵犯时返回-1。

使用 Effort 的当前结果是代码通过没有任何问题,它没有捕获唯一键失败,甚至在 Exception 捕获中也没有,并且测试通常会以递增主键的方式保存它。

是否可以努力模拟唯一密钥失败?,我错过了什么吗?

提前感谢您的帮助。

0 投票
1 回答
378 浏览

c# - 努力实体框架序列包含不匹配的元素

所以我一直在尝试设置 Effort,但并没有取得太大的成功。查看他们的网站和人们的评论,看起来很简单。

我从小处着手,因为我只是想测试它是否有效。我得到的错误是“序列不包含匹配元素”

我在 dbcontext 中添加了一个这样的构造函数。

我的设置就像我的测试一样

只是一个测试,看看它是否有效

MyType 的类

我也用createpersistent尝试过这个。结果相同。

我首先使用 ef6 代码,mvc 5,.net 462。

0 投票
1 回答
1235 浏览

c# - Effort.Exceptions.EffortException:数据库尚未初始化 - 在未提交更新之后?

为什么会出现这个异常?这是一个错误吗?

我正在使用 Effort,EF 测试库来创建我的数据库的内存实例并遇到这个有趣的场景:

  1. 打开DbContext1
  2. 添加项目Table(不保存)
  3. DbContext1
  4. 打开DbContext2
  5. 计数项目Table

Effort.Exceptions.EffortException : Database has not been initialized.

但是,如果我也在其中执行计数(步骤 5),DbContext1那么计数DbContext2不会失败?

完整代码

完全例外:

0 投票
2 回答
3339 浏览

c# - UnintentionalCodeFirstException | 使用 Effort.Ef6 使用 Database First 进行实体框架单元测试

情况

我想启用DbContext基于实体框架 6 的单元测试。我已经DbContext使用数据库优先方法创建了我和我的模型,现在有一个.edmx设计器文件。

问题

我自动创建DbContext的确实覆盖了DbContext.OnModelCreating这样的方法:

我正在尝试根据本文DbContext的信息在我的模拟数据访问服务中创建我的新实例。我的代码没有像这篇博文的作者指出的那样运行。我的构造函数看起来和他的一模一样。我的初始化如下所示:Database.SetInitializer;DbContext

达到前面提到的覆盖时会导致以下异常OnModelCreating

System.Data.Entity.Infrastructure.UnintentionalCodeFirstException: '上下文在 Code First 模式下使用,代码是从 EDMX 文件生成的,用于 Database First 或 Model First 开发。这将无法正常工作。要解决此问题,请不要删除引发此异常的代码行。如果您希望使用 Database First 或 Model First,请确保 Entity Framework 连接字符串包含在启动项目的 app.config 或 web.config 中。如果要创建自己的 DbConnection,请确保它是 EntityConnection 而不是其他类型的 DbConnection,并且将其传递给采用 DbConnection 的基本 DbContext 构造函数之一。要了解有关 Code First、Database First 和 Model First 的更多信息,请参阅此处的实体框架文档:http://go.microsoft.com/fwlink/?LinkId=394715 '

关于 stackoverflow 有很多问题,它们专注于在使用数据库优先方法时努力进行单元测试,但似乎没有人像我一样遇到类似的问题。

我已经尝试过的事情

  • 在网上找了很久的解决办法。
  • 取消注释被覆盖的OnModelCreating().
  • 我已经尝试应用此解决方案但没有成功。
  • DbContextMoq模拟我,这绝对不是一种选择。

问题

我如何创建和使用内存数据库(努力)?


附加信息

当我取消注释OnModelCreating()时,第一次访问 DataContext 时将引发异常。例如:

System.Data.Entity.ModelConfiguration.ModelValidationException: '在模型生成期间检测到一个或多个验证错误:MyApplication.Shared.Model.KeyValuePair::EntityType'KeyValuePair'没有定义键。定义此 EntityType 的键。KeyValuePairs:EntityType:EntitySet 'KeyValuePairs' 基于没有定义键的类型 'KeyValuePair'。

0 投票
1 回答
864 浏览

c# - 使用 Effort.EF6 测试预加载场景

我们正在使用Effort.EF6为针对内存数据库的 ASP.NET Web API 2 服务构建一个测试套件,并且在大多数情况下,这是一次美妙的体验。

但是,由于与这个问题无关的原因,我们不得不在 EF6 中关闭延迟加载(通过Configuration.LazyLoadingEnabled = false; 在 db 上下文的构造函数中运行),这意味着如果我们忘记.Include()某个关系并稍后使用它,我们会得到NullReferenceExceptions. 我们希望我们的测试能够捕捉到这些类型的错误。

我们的测试设置基本上如下:

  1. 使用 Effort 的连接工厂创建一个数据库连接。这是每个测试的唯一连接实例(当我们尝试使用持久连接时,具有唯一键)。
  2. 使用该连接创建一个数据库上下文,并添加我们希望为测试存在的数据。
  3. 在 DI 容器中为 db 上下文注册服务覆盖。

问题是我们无法弄清楚如何配置 Effort.EF6 以禁止延迟加载,因为似乎我们在测试设置中添加到上下文中的任何内容在测试代码运行时都已经加载,因此我们从来没有见例外。我们假设这是因为我们在测试设置和实际代码执行之间重用了上下文实例。

如果我们尝试将第三步切换为以下:

  1. 在 DI 容器中为 db 连接注册服务覆盖。
  2. DI 容器创建一个 db 上下文实例(将 db 连接作为注入依赖项)

相反,我们最终得到了一个的数据库上下文,即尽管我们在运行测试之前添加了一些数据点,但它没有数据。

我们如何使用 Effort 构造和注入数据库上下文,如果.Include()语句丢失,它将失败,但如果它存在则工作?