gpt4 book ai didi

c# - Rhino 使用 FakeItEasy 模拟 'Expect'

转载 作者:行者123 更新时间:2023-11-30 13:31:37 24 4
gpt4 key购买 nike

我有一个数据库操作对象作为我的 UUT(被测单元)的依赖项。因此,我想把它作为一个严格的模拟,因为我还想确保 UUT 不会调用任何其他可能导致数据库更改的方法。

在 rhino mocks 中我做了以下事情:

  1. 我从 db 对象做了一个 strictmock
  2. 我在 Arrange 中做了一个 .Expect 子句
  3. 我在 Assert 中调用了 VerifyAllExpectations

但是,当我想在 FakeItEasy 中执行此操作时,我找不到不重复代码的方法。我尝试将 CallsTo()+MustHaveHappened() 部分放入 Arrange 中,但随后我的测试失败了。如果我将 CallsTo()+MustHaveHappened() 部分放在断言中,那么我的测试也会失败,因为对严格伪造的意外调用进行了调用。这可以在不将 CallsTo 调用同时放入 Arrange 和 Assert 的情况下完成吗?

最佳答案

虽然来自@jimmy_keen 的答案会奏效(我什至赞成它),但 FakeItEasy 的更惯用的用法是:

// Arrange
var service = A.Fake<IService>(o => o.Strict()); // only allows configured calls
A.CallTo(() => service.PostData("data")).DoesNothing(); // allow a specific call

// Act
testedObject.CallService("data");

// Assert
A.CallTo(() => service.PostData("data")).MustHaveHappened(Repeated.Exactly.Once);

---更新---

在@blairconrad 的帮助下 https://github.com/FakeItEasy/FakeItEasy/issues/198#issuecomment-29145440我认为这是最简洁的方法,无需重复:

// Arrange
var service = A.Fake<IService>(o => o.Strict()); // only allows configured calls
var expectedCall = A.CallTo(() => service.PostData("data"));
expectedCall.DoesNothing(); // allow the call

// Act
testedObject.CallService("data");

// Assert
expectedCall.MustHaveHappened(Repeated.Exactly.Once);

关于c# - Rhino 使用 FakeItEasy 模拟 'Expect',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20096579/

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