问题标签 [fakeiteasy]

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 投票
2 回答
1463 浏览

c# - 如何在 FakeItEasy 中为基于自定义委托的事件引发事件?

我正在测试的应用程序充满了基于自定义委托的事件,例如:

我想模拟产生这些事件的类,并将这些事件提交给被测类。

我知道 FakeItEasy 可以使用 or的Raise.With()传统事件签名来引发事件 ,但我不知道在我的情况下该怎么做。 MyHandler(object sender, EventArgs e)MyHandler(EventArgs e)

有任何想法吗?

0 投票
2 回答
2707 浏览

c# - FakeItEasy - 是否可以拦截一个方法并用我自己的实现替换它?

我有以下界面:

在我的单元测试中,我像这样模拟它:

我想要做的是拦截 Write 方法,以便它使用我在测试中定义的自定义实现。像这样的东西:

此处该Action方法不存在,但我希望将传入的任何参数outputDestination.Write重定向到我的自定义操作。这可以使用 FakeItEasy 吗?如果没有,是否有另一个允许这种行为的模拟框架?

0 投票
2 回答
170 浏览

c# - 依赖注入重构

我有这个ctor:

我想得到这样的东西:

当然,这是行不通的。有人对我如何重构此代码有任何建议吗?我需要这样做才能在单元测试中模拟 Section 类型的对象。我们正在使用 FakeItEasy 测试框架。

0 投票
2 回答
6819 浏览

c# - 如何使用 FakeItEasy 访问 Returns() 中的参数值?

我有一个用于创建一些数据对象的工厂的接口。

我需要创建一个模拟工厂来传递给另一个模块,这个模块将使用这个模拟来创建数据。

举个简单的例子,一个简单的模块如下所示:

因此,使用两组参数调用工厂两次。

使用起订量,这很容易:

然而,使用 FakeItEasy 这似乎是不可能的:

如何访问参数值?

0 投票
1 回答
94 浏览

c# - 使用 IoC 时未调用 MustHaveHappened

我正在尝试测试是否进行了服务调用。我有一个IAuthenticationService可以UpdateUserProfile打电话的。在IAuthenticationServiceIoC 中(StructureMap在我的情况下)。 MustHaveHappened正在返回0呼叫,但我知道它发生在调试中。

0 投票
2 回答
1030 浏览

c# - 如何使用 FakeItEasy 断言选择的调用

使用 FakeItEasy,如何断言发生了任何调用?

用例是我正在编写一个与存储库一起使用的类,并且作为一个方法的结果,该类应该通过调用 DeleteAll 或为所有元素调用 Delete 从存储库中删除一些元素。

现在,我使用了这样的 try-catch:

但我不喜欢这样,如果有更多选择,它很快就会变得非常难看。有没有更好的办法?我在 FakeItEasy wiki 上找不到任何东西。

0 投票
1 回答
4090 浏览

c# - FakeItEasy 说 MustHaveHappened 没有发生……但确实发生了

我正在尝试对“服务层”/“应用程序外观层”方法进行单元测试。这是我试图单元测试的方法:

(注意……为了清楚起见,我在这里添加了大量的注释。我通常不那么健谈。)

由于这个方法的工作是编排领域层方法和持久层方法来创建一个空订单,持久化它,并将它作为一个简单的 DTO 返回,我认为这对于 FakeItEasy 来说是一项很棒的工作......我会确保那些关键方法正在被正确编排,以确保使用 FakeItEasy 的 MustHaveHappened() 调用它们。

因此,考虑到这一点,这是我创建的单元测试:

在单元测试中,我无法访问在被测方法中创建的 ACTUAL Order,我尝试做下一件最好的事情......取被测试方法返回的 Order 的 DTO 版本,map Order 的 DTO 版本返回到域模型 Order 的新实例,并在将其发送到 FakeItEasy 的 MustHaveHappened() 之前确保属性相同。

我已经调试了单元测试并查看了 ACTUAL Order 的属性与 FAKED Order 的属性……我向你保证,它们是相同的。此外,我可以通过调试确认 _customerRepository.Save(order) 确实被调用了。

问题 .MustHaveHappened() 是否失败是因为我实际上是在发送 Order 对象的两个不同实例——即使它们的属性相同?即使属性相同,FakeItEasy 是否需要输入参数的相同实例才能确保方法调用发生?

此外,关于我应该如何测试这类事情(即编排/服务/“应用程序外观”/what-ever-you-want-to-call-it layer 方法)的任何建议?

0 投票
1 回答
1772 浏览

unit-testing - FakeItEasy 深嵌套类型伪造

我有一个想要伪造的复杂对象。

但我得到了下一个例外:

The current proxy generator can not intercept the specified method for the following reasons: - Non virtual methods can not be intercepted

所有嵌套类型都是属性,它们是带有get; set;属性修饰符的简单贫血类型。当我查看调试器时,它们都是假的。

有没有办法设置链的最后一个属性并避免设置所有以前的属性?

0 投票
2 回答
580 浏览

asp.net-web-api - 测试项目扫描我的控制器两次

我为这个特定的帖子创建了一个 github 存储库,可以在https://github.com/CrazyInCode/WebApiNServiceBus找到

我要做的是为我的 WebApi 应用程序编写测试。在我的规格测试中,我...

  1. 创建一个 HttpClient 来使用 WebApi
  2. 通过 HttpClient 调用我的 WebApi
  3. 将结果序列化为列表
  4. 确保已调用 NServiceBus

所有这些都可以在这里找到。

我也在使用 StructureMap,我猜它会扫描我的 ApiControllers。NServiceBus 似乎也扫描了我的 ApiControllers,因为当我尝试运行我的测试时,我得到了错误:

真正发现错误并不容易。我必须...

  1. 在 Global.cs(Specs 项目)的第 21 和 26 行放置一个断点
  2. 调试测试并确保测试在第一个断点处停止
  3. 浏览http://localhost:81/ValService/api/values/assets将加载的...
  4. 继续测试并确保测试在最后一个断点处停止
  5. 在网络浏览器中查看结果

如果我删除所有包含 IBus 的行,并执行上述步骤 - 测试通过。显然 NServiceBus 与测试失败有关。

正如我之前所说,NServiceBus 似乎会扫描我的程序集以查找控制器。为了防止这种情况,我尝试在 Global.cs 中添加这一行来指定 NServiceBus 应该扫描的内容 - 但没有成功。

解决方案中的主要组件是 WebApi、NServiceBus、StructureMap、FakeItEasy 和 SpecFlow。

我被困住了。我怎样才能使我的测试通过?

编辑:也许解决方案是让 WebApi 不注册控制器 - 把它留给 NServiceBus?我怎么能试试这个?

0 投票
1 回答
2181 浏览

c# - 伪造一个泛型方法 FakeItEasy

您将如何伪造以下内容:

我想要的是假货只是简单地返回它的论点而不做任何改变。但是,我想验证该假货是否只被调用过一次。下面给出了一个用例:

即假货需要充当通过,但我还需要能够验证它已被使用。

解决这个问题的最佳方法是什么?

[请不要担心人为的例子......幕后发生了很多事情,但我已将其简化为上面的例子。]